Perl primer: Daten in mehreren Zeilen

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von rikola, 03.11.2009.

  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. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #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...