Perl primer: Daten in mehreren Zeilen

Diskutiere Perl primer: Daten in mehreren Zeilen im Ruby, php, Perl, Python ... Forum im Bereich Programmieren unter Linux/Unix; Hallo, ich habe eine Logdatei im Format >>>>>>>>>>>> tag1: Daten tag2: Daten Daten Daten tag3: Daten <<<<<<<<<<<<...

  1. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Hallo,

    ich habe eine Logdatei im Format
    Code:
    >>>>>>>>>>>>
    tag1: Daten
    tag2: Daten
            Daten
            Daten
    tag3: Daten
    <<<<<<<<<<<<
    >>>>>>>>>>>>
    tag1: andere Daten
    tag2: andere Daten
            andere Daten
    tag3:
    <<<<<<<<<<<<
    
    Diese Datei wuerde ich gerne mit Perl verarbeiten.

    Die Datei wird mit "open (INP, "<filename");" geoeffnet und dann mit "while (<INP>)..." durchlaufen.
    Dazu habe ich folgende Fragen:

    Den Block zwischen ">>>>" und "<<<<" wuerde ich gerne mittels einer subroutine verarbeiten. Was muss ich da der subroutine uebergeben? Mit "$_" erfasse ich ja nur die aktuelle Zeile, oder nicht? Kann ich "INP" uebergebeb???
    Die Daten von 'tag2' koennen in mehreren Zeilen stehen.

    Wenn ich innerhalb der "while(<Inp>)" ein "if /tag2/" habe, wie kann ich dann in dem if-Block eine Zeile weiterspringen. Oder ist das die falsche Denkweise fuer Perl?
     
  2. #2 yai, 04.11.2009
    Zuletzt bearbeitet: 04.11.2009
    yai

    yai yet another idiot

    Dabei seit:
    22.01.2007
    Beiträge:
    166
    Zustimmungen:
    0
    Du kannst den file descriptor (FD, oder INP wenn du willst) so übergeben:
    Code:
    #!/usr/bin/perl
    use strict;
    use warnings;
    
    open (FD, "< test.txt");
    readfile(*FD);
    close FD;
    
    sub readfile {
      *FD = shift;
      while (<FD>) {
        print;
      }
    }
    
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    so, da bin ich wieder (muss ja zwischendurch auch mal arbeiten :-).
    versuch's mal so:
    Code:
    #!/usr/bin/perl
    use strict;
    use warnings;
    
    open (FD, "< test.txt");
    while (<FD>) {
      if (/^>+$/) {
        readfile(*FD);
      }
    }
    close FD;
    
    sub readfile {
      *FD = shift;
      my ($tag, $data);
      while (<FD>) {
        return if (/^<+$/);
        if (/^(tag\d+):(.*)/) {
          $tag = $1;
          $data = $2;
        } else {
          $data .= $_;
        }
        printf("%s:%s\n", $tag, $data);
      }
    }
    
    
    alternativ kann man die ganze Datei auch in ein Array einlesen und dann zweilenweise bzw. über den Array Index verarbeiten.
    Code:
    #!/usr/bin/perl
    use strict;
    use warnings;
    
    open (FD, "< test.txt");
    my @file = <FD>;
    close FD;
    for (@file) {
      print;
    }
    # oder
    for (my $i=0;$i<$#file;$i++) {
      print $file[$i];
    }
    
    Oder du liest alles in eine skalare Variable
    Code:
    #!/usr/bin/perl
    use strict;
    use warnings;
    
    open (FD, "< test.txt");
    my $file;
    while (<FD>) {
      $file .= $_;
    }
    close FD;
    print $file;
    
    dann kannt du das globale pattern matching nutzen:
    Code:
    /^(tag\d+):(.*)/mg 
    
    oder so ähnlich.
    Bye,
    yai.
     
Thema:

Perl primer: Daten in mehreren Zeilen

Die Seite wird geladen...

Perl primer: Daten in mehreren Zeilen - Ähnliche Themen

  1. Linux Foundation: Hyperledger-Projekt startet mit 30 Mitgliedern

    Linux Foundation: Hyperledger-Projekt startet mit 30 Mitgliedern: Das Hyperledger-Projekt der Linux Foundation will eine neue Form der dezentralisierten Kontoführung nach dem Prinzip der »distributed ledger« bei...
  2. Perl 6 offiziell vorgestellt

    Perl 6 offiziell vorgestellt: Wie erwartet, ist die Version C(hristmas) von Perl 6 veröffentlicht worden. Perl 6 stellt nicht, wie der Name suggeriert, einen Nachfolger von...
  3. Perl: 20 Jahre CPAN

    Perl: 20 Jahre CPAN: Vor 20 Jahren wurde das erste Modul in das Comprehensive Perl Archive Network (CPAN) hochgeladen, woran Neil Bowers mit einem Abriss der...
  4. Perl 5.22.0 freigegeben

    Perl 5.22.0 freigegeben: Die neue Version 5.22 von Perl bringt den Anwendern mehr Sicherheit bei Eingabedateien, Unicode 7.0 und zahlreiche weitere Verbesserungen....
  5. [Perl] Perl OO Methodenaufruf in anderem Objekt

    [Perl] Perl OO Methodenaufruf in anderem Objekt: Hallo, Ich bin dabei in Perl ein Pokerspiel zu programmieren, hänge aber momentan an einem Problem, wo ich nicht weiterkomme. Ich habe die...