Flo: Datei auslesen!

Hallo,

könnt ihr mir sagen wie ich eine Datei auslesen kann und alles einer Variable zuordnen kann und nicht einem Array???

Vielen Dank!

  1. Hallo,

    zum Bleistift:

      
      my $str=join("",<FH>);  
    
    

    gruss

    --
    no strict;
    no warnings;
    79.78 cups of Coffee (Brewed) + Me = Death
    <exal> BEI MIR KOMMT IMMER DIE EINS STATT EINEM AUSRUFEZEICHEN111 (http://german-bash.org/3361)
  2. Tag Flo.

    könnt ihr mir sagen wie ich eine Datei auslesen kann und alles einer Variable zuordnen kann und nicht einem Array???

    Das ist nicht Sinn und Zweck der Übung. Der Zugriff auf ein Filehandle liefert dir im skalaren Kontext die erste noch nicht gelesene Zeile, im Listenkontext ein Array aller Zeilen, das join-Konstrukt ist m.E. nur eine Krücke. Also solltest du beschreiben, warum du die Daten in einem Skalar statt einem Array speichern möchtest, es gibt bestimmt einen besseren Weg für dein Vorhaben.

    Siechfred

    1. Hallo,

      und zwar ich möchte eine Datei auslesen und in einer DB speichern. Dazu brauche ich ja die Reg. Ex. und muss es auf einer Variable anwenden oder???

      Wie lese ich denn am besten eine Datei aus und lasse den Inhalt bis zu einem bestimmten Wort ausgeben! Oder dann von einem Wort bis zu einem Wort????

      Z.B. Datei:

      Flo_0815
      Date 05-09-23 Time 13:33:33

      Jetzt will ich erst Flo_0815 haben und dann zwischen Date und Time 05_09_23!!!

      Wie mache ich denn dies am besten beim Auslesen einer Datei????

      Vielen lieben Dank!

      1. Tag Flo.

        und zwar ich möchte eine Datei auslesen und in einer DB speichern. Dazu brauche ich ja die Reg. Ex. und muss es auf einer Variable anwenden oder???

        Ja, allerdings kannst du dies bereits beim Auslesen mit while(<FILEHANDLE>) tun.

        Flo_0815
        Date 05-09-23 Time 13:33:33
        Jetzt will ich erst Flo_0815 haben und dann zwischen Date und Time 05_09_23!!!

        Bei der konkreten Struktur (die ich für denkbar schlecht gewählt halte) wäre ein Hash oder ein mehrdimensionales Array vielleicht nicht die schlechteste Lösung (falls du die Daten für alle User haben möchtest). Das Auslesen zweier aufeinanderfolgender zusammengehörender Zeilen könntest du über ein "Gefunden"-Flag realisieren.

        Siechfred

        1. Kannst du mir ein Beispiel bitte geben wie ich z.B. bis Date ausgebe mit Reg. Ex.???

  3. Hallo,

    könnt ihr mir sagen wie ich eine Datei auslesen kann und alles einer Variable zuordnen kann und nicht einem Array???

    siehe dazu http://perldoc.perl.org/perlvar.html und suche dort nach $INPUT_RECORD_SEPARATOR.
    Allerdings denke ich auch nach Durchsicht dieses Threads, dass das nicht das ist was Du willst, da Du ja den Inhalt der Datei zeilenweise verarbeiten willst.
    Kannst Du etwas mehr Informationen zum aktuellen Dateiinhalt machen? Irgendwie ist mir z.B. nicht klar was 'Flo_0815' bedeutet und wie Du diesen Eintrag erkennen willst, wenn er eventuell variabel ist, was ich mal annehme.

    Grüße
      Klaus

    1. Hallo,

      Flo_0815 will ich erkennen da danach immer Date kommt! Dann kann auch Flo_0815 variable sein!

      1. Tag Florian.

        Flo_0815 will ich erkennen da danach immer Date kommt! Dann kann auch Flo_0815 variable sein!

        Angenommen, du hättest irgendwo in einer riesigen Textdatei zwei unmittelbar aufeinander folgende Zeilen stehen:

        Flo_0815
        Date 05-09-23 Time 13:33:33

        Das Prinzip wäre dann folgendes:

        my $found = 0;  
        my $user = "Flo_0815";  
        my $wert;  
        open(FH, "datei.txt") or die "Error: $!";  
        while(<FH>) {  
          chomp($_);  
          # gefunden? dann lies die nächste Zeile  
          # und brich die Schleife ab  
          if($found == 1) {  
            $_ =~ /^Date\s(.+?)\sTime/;  
            $wert = $1;  
            last;  
          }  
          # noch nicht gefunden?  
          # dann vergleiche die aktuelle Zeile  
          # mit dem gesuchten Usernamen  
          if($found == 0 && $_ eq $user) {  
            $found = 1;  
          }  
        }  
        close(FH);
        

        Ergibt als Wert "05-09-23".

        Siechfred