Thread Dateien durchsuchen (war: Kann man das so machen1) (5 answers)
Opened by rk-ger at 2006-08-29 00:53

Dubu
 2006-08-29 22:18
#69335 #69335
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=rk-ger,28.08.2006, 22:53]
Code: (dl )
1
2
use strict;
use warnings;
[/quote]

Sehr löblich.

Quote
Code: (dl )
my $startdir = "c:\\foo\\bar\\";            # in welchem dir geht es los?


Man kann unter DOS/Windows wie unter UNIX/Linux auch den Vorwärtsschrägstrich als Verzeichnistrenner benutzen, was meist etwas übersichtlicher ist.
Code: (dl )
my $startdir = 'C:/foo/bar/';


Quote
Code: (dl )
1
2
                                                # und dann zum lesen öffnen
     open IN,"<${startdir}$filename" or die "Datei kann nicht geöffnet werden -> ${startdir}$filename : $!";


Bei neueren Perl-Versionen wird die "3-Parameter-Form" von open() bevorzugt, weil sie sicherer ist.
Ich persönlich bevorzuge es auch, beim Zusammensetzen von Pfad und Dateinamen explizit einen Pfadtrenner zu setzen (dann kann man ihn beim Pfadnamen problemlos weglassen).
Code: (dl )
open (IN, '<', "$startdir/$filename") or die "...";



Quote
Code: (dl )
1
2
3
4
5
6
7
      my @in = <IN>;
     $NR_found = "0";                     # variable zurücksetzen
     foreach my $line (@in) {               # jede datei zeilenweise durchgehen
      if ($line =~ /(NR \d{7})/) {         # was sinnvollen gefunden?
         $NR_found = $1;                  # dann speichern
       }
     }                                 # alle zeilen durch?


Es ist ineffizient, erst die ganze Datei einzulesen und dann zeilenweise durchzugehen. Besser direkt zeilenweise einlesen und abarbeiten. Auch kann man die Schleife abbrechen, wenn ein Treffer gefunden wurde (außer, es können mehrere Treffer in der Datei vorkommen und du möchtest immer gerade den letzten haben).

Code: (dl )
1
2
3
4
5
6
7
$NR_found = "0";
while (my $line = <IN>) {
   if ($line =~ /(NR \d{7})/) {
       $NR_found = $1;               # Treffer speichern
       last;                         # Schleife abbrechen
   }
}


Quote
Code: (dl )
      if ( not $NR_found eq "0") {            # haben wir was?


Oder:
if ($NR_found ne "0") ...

View full thread Dateien durchsuchen (war: Kann man das so machen1)