Thread Regex ausdrücke und bestimmte Zeile machen Probleme (12 answers)
Opened by orlando2016 at 2015-04-29 19:49

orlando2016
 2015-05-05 20:39
#180951 #180951
User since
2015-04-27
5 Artikel
BenutzerIn
[default_avatar]
To hlubenow:
die Fehlermeldung push ... zeigt trotzdem an, obwohl ich mit dem Beispiel_Liste.txt durchgelaufen habe. Die Version ist 5.12.3. Eine Update zu machen, traue ich im Moment noch nicht zu. Ich möchte zunächst mal den Perl Programm vertraut machen.

Die Datensätze sollen Abschnitt mit "Geburtuhrzeit 1999.07.31.21.29.53" und dazugehörige Informationen in die Sortiert.txt gebracht werden. Die Uhrzeit ist unwichtig, entscheidend ist das Datum und Geburtuhrzeit. Das heisst im Beispiel_Liste.txt sind zwei Abschnitte mit Geburtuhrzeit 1999.07.31.21.29.53 enthalten. Das hast du schon richtig verstanden.

Ich habe in dem Programm Kommentare geschrieben, ob ich auch richtig verstanden habe, was die Zeile alles bedeutet.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
my $i; # für die äussere Schleife
my $u; # für die innere Schleife
 
open($infile, '<', 'herausfinden.d') or die "$!";
my @a = <$infile>;
close($infile);
 
my @b = (); #Leere Array
my %h; # hier habe ich noch nicht ganz verstanden, was das Prozent bedeutet. Im Internet versuchte die Erklärung heraus zu finden...
my $count = 0; # habe ich eingefügt, da ich sehen möchte, ob die Zeile richtig erkannt hat, und für mich erleichtert das Suchen im Beispiel_Liste.txt. Im Wirklichkeit ist die Datei viel länger...
foreach $i (@a) # start der äussere Schleife, um die Datei jede Zeile einzulesen
{
    chomp($i); # chomp the trailing newline, It shows the readline
    $count = $count + 1;
    #print "$count \n"; #dient als Kontrolle
    if ($i eq "") # Search for empty line
    {
                print "Find empty line $count \n"; #Kontrolle funktioniert
                #next;
                foreach $i (@a) #ab hier habe ich versucht mit dem festen Datum zu arbeiten, es hat auch funktioniert
                {
                               if ($i =~ /Geburtuhrzeit [0-9].[0-9]/)
        {
                  my (undef, $year, $month, $day) = split(/\s|\.|\//, $i); 
                               if (($year == 2010) && ($month == 07) && ($day ==31))
                                 {
           print "Find  Geburtuhrzeit with fixed date line $count $i \n";
           next;
# Ab hier kam ich nicht mehr weiter, da müsste ich noch weiter herum werkerln, vielleicht habt ihr einen Tipp...
     #   if ($#b >= 1 && $b[1] =~ /Geburtuhrzeit [0-9].[0-9]/)
           # {
            # print "Find Geburtuhrzeit line $. \n"; # Kontrolle Funktioniert, ich möchte eine festes DAtum suchen!
          #  $h{$b[0]} = [];
           # foreach $u (1 .. $#b) # foreach (startwert..... $#array)
           # {
          #      push ($h{$b[0]},($b[$u])); # push (ARRAY, newLIST) # hat nicht geklappt!
          #  }
        }
        @b = ();
        next;
    }
  }

Bitte helf mir noch einmal den Tipps, wie ich weiter komme....

An Raubtier:
Ich möchte die Zeile der Datensätze nicht löschen und den übrigen in eine andere Datei sortieren. Vielleicht hätte ich genauer beschreiben sollen, was ich genau meinte.

modedit Editiert von GwenDragon: Quellcode in Perl-Tags gestellt
Last edited: 2015-05-05 21:01:30 +0200 (CEST)

View full thread Regex ausdrücke und bestimmte Zeile machen Probleme