Struppi: open+Regular Expressions

Beitrag lesen

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.