Hierzu habe ich u.A. folgenden Code geschrieben
"
$dir = "C:/Dokumente und Einstellungen/eisenhutm/Desktop/SDST/TBDs/bwt";
Du benutzt nicht strict?
solltest du tun.
opendir(BIN, $dir) or die "Can't open $dir: $!";
while( defined ($file = readdir BIN) ) {
if($file=~(/.log/)){
print"$file\n";
$datei=$file;
Warum nicht:
my $datei = "$dir/$file";
open(FILE,"C:/Dokumente und Einstellungen/eisenhutm/Desktop/SDST/TBDs/bwt/$datei")|| die"FEHLER:$!\n";
Dann sparst du hier das Verzeichniss.
if($zeile=~(/.bmp|.BMP|.wav|.WAV/)){
[b]====>FEHLER ****[/b] if($zeile=~(/(.*)"(.*)"/)){
$dat=$2;
print "$dat $zeile";
Das Programm funktioniert soweit auch und gibts u.A. folgende Zeilen aus :antwb_12.bmp ItemspezifischeWerte"12",12,"aufwb_12.bmp","antwb_12.bmp"),
Das klappt nur, weil dein Ausdruck greedy ist und bis zum letzten vorkommen von ".*" den String durchsucht.
Ich würde versuchen, den Ausdruck spezifischer zu machen für das was du suchst.
Quelle: ItemspezifischeWerte"12",12,"aufwb_12.bmp","antwb_12.bmp"),
also die zu löschenden Dateien und den Pfad==>PROBLEM, einige Dateien haben folgenden Zeilenaufbau
Quelle : ItemspezifischeWerte("1",1,"auftr_01.bmp"," 63"),
D.h. du suchst nicht den 4. Parameter, sondern den dritten?
vielleicht so:
my $zeile = 'ItemspezifischeWerte("1",1,"auftr_01.bmp"," 63")';
zeile =~ s/"//g;
zeile =~ /((.*))/;
my @p = split ',', $1;
print $p[2];
Struppi.