bovo: Datei durchsuchen und bestimmte Teile speichern, sowie ausgeben

Hallo liebe Leute,

Hier ist mein Problem :

Ich habe eine Text Datei, deren Inhalt ist z.B.: "a,2,b,3,aaa,4,*N,20" . Aber ohne Anführingsstriche und alles nur in einer Zeile!
Diese öffne ich und will nur die Inhalte zwischen den Komma's abspeichern, also egal wieviel Zeichen zwischen den Kommas sind.
Ich habe es schon mit :

open(DATEI, "<text.txt") || die " File not found.";
 @tests = <DATEI>;
    while(! eof(DATEI)){
      @tests =~ /(.*),(.*)/;
         $var1 = $1;
         $var2 = $2;
  printf "$1 und $2 \n";

}
    close(DATEI);

versucht. Aber er gibt mir jedes in der Anzahl Zeichen Fälle aus, also im oberen Beispiel sinds 19 Zeichen...also 19 Fälle aber es sollten nur 8 Fälle sein.
Diese Fälle sind ohne Inhalt.

Ich hoffe Ihr könnt mir helfen.

Gruss
    Bovo

  1. Halihallo bovo

    open(DATEI, "<text.txt") || die " File not found.";
    @tests = <DATEI>;
        while(! eof(DATEI)){

    Stopp. Du liest die gesamte Datei in ein Array ein und machst eine While bis das
    Dateiende erreicht wird, welches eigentlich bereits eingetreten ist und du gar nicht
    mehr in der Datei nach vorne liest (sprich eof ist immer true)?

    @tests =~ /(.*),(.*)/;

    Ein split ist hier wesentlich performanter und sicherer:

    foreach (@tests) {
       my @parts = split(/,/,$_);  # du hast sowohl Dateidaten, als auch Parts im selben
             # array gespeichert, das _kann nicht gut kommen_.
       # do something with @parts
    }

    perldoc -f split

    printf "$1 und $2 \n";

    printf sollte ohne Formatierung und Platzhalter vermieden werden, verwende hier einfach
    print. printf ist unsicher und aperformant.

    aus perldoc -f printf:
    <cite>
                Don't fall into the trap of using a "printf" when a simple
                "print" would do. The "print" is more efficient and less error
                prone.
    </cite>

    Viele Grüsse

    Philipp

    --
    RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
    Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
    1. Hallo Philipp...erstmal Danke für Deine Hilfe
      aber wie kann ich die einzelnen gesplittenen Bereiche rausfiltern
      und ausgeben und zwar in $var1 sowie $var2   ??

      Danke Dir.

      1. Halihallo bovo

        aber wie kann ich die einzelnen gesplittenen Bereiche rausfiltern
        und ausgeben und zwar in $var1 sowie $var2   ??

        perldoc perlfaq4  // Sektion Array
        perldoc perldata

        => über Indizies, @array : erstes Element ist Index 0 => $array[0]

        Viele Grüsse

        Philipp

        --
        RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
        Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
      2. hi hi

        mit

        foreach (@parts){
        $_                 # $_ enthält den aktullen string
        ...
        ...
        }

        kommst du an jeden string

        bis bis roman

  2. Hi bovo,

    open(DATEI, "<text.txt") || die " File not found.";
     @tests = <DATEI>;

    Besser wäre an dieser Stelle das zeilenweise Einlesen mit while.

    while(! eof(DATEI)){

    Das hier ist imho überflüssig.

    @tests =~ /(.*),(.*)/;

    Hier wäre die Verwendung der split-Funktion angebrachter:

    @test = split (/,/, $zeile);

    Viele Grüße
    Torsten