Thread Ausgabe aus Array
(10 answers)
Opened by tejste at 2012-11-15 17:36
Es ist richtig Perl benutzt "\n" als Zeilentrenner, wenn nichts anderes Angeben ist. Unter Windows ist das "\x0D\x0A" unter Linux/Unix "\x0A". Je nach OS kann der Trenner anders sein. XML Auf der anderen Seite kennt keine Zeilen und damit Zeilentrenner. Alle Umbrüche werden wie Leerzeichen behandelt. Das bedeutet für dich, du kannst dir nicht sicher sein, dass eine Zeile auch immer einen Datensatz enthält und das der Zeilentrenner immer dem entspricht was auf dem System verwendet wird.
Ich nehme mal an das du das alles weißt und geprüft hasst. Alle Datensätze sind gleich formatiert sind und die Zeilenumbrüche korrekt erkannt werden. Das einlesen aller Zeilen in ein Array um dann ein paar wenige Zeilen auszugeben ist nicht sonderlich sinnvoll. Du packst ~110000Byte in den Speicher um ein paar Byte auszugeben. In dem Fall ist es sinnvoller eine Zeile zu lesen, diese zu prüfen und dann aus zu geben. Das hier my $seek=~m/UserName(.+)/; prüft ob undef "UserName"mit zusätzlichen Zeichen enthält. Was du vermutlich willst ist:my $seek=qr/UserName(.+)/; qr erzeugt (vorkompiliert) einen regulären Ausdruck. =~ wendet ihn an. for(my $i=0; $i<=$#vektor; $i++) Das ist eine umständliche Schreibweise für for my $i (0..$#vektor) Was du eher schreiben solltest ist: Insgesamt sollte der Code besser so aussehen: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #!/usr/bin/perl use strict; use warnings; my $logfiles = 'C:\test\xunix\logfile_tracefiles\TraceLog_.txt'; my $seek = qr/UserName(.+)/; $/="\x0A"; # gemeinsamer Nenner für Windows/Linux/Unix open(my $fh, '<', $logfiles) or die "Can't open $logfiles ($!)\n"; while(my $line=<$fh>) { if($line=~$seek) { print $1; } } close($fh); |