Verzeichnis öffnen, Dateien durchsuchen, speichern

Hallo,
ich wollte ein bestimmtes Verzeichnis öffnen und die Dateien, die dort liegen nacheinander öffnen und durchsuchen, danach diese unter anderem Namen dort oder auch wo anders abspeichern!!

Hier ist mein Code:

$quelle = $ARGV[0];
$x = $ARGV[0];
$x =~ s/(\w+).\w+/$1/;
$ziel = $x;

open ($INPUT,")
{
if ($line =~ /.CBT/gsm)
{
$cbt = 1;
}
elsif ($line =~ /BARCODE/gsm)
{
$barcode = 1;
}
elsif ($line =~ /AATHD000000.000/gsm)
{
$falscheangabe = 1;
}
elsif ($line =~ /PASS/)
{
$start_pos = tell($INPUT);
}
elsif ($line =~ /FAIL/)
{
$end_pos = tell($INPUT);
}
}

if ( $end_pos)
{
$status = ‚01‘;
$result = ‚Failed‘;

seek($INPUT, $start_pos, 0);
$hit;

while ($line = )
{

chomp($line);
last if $end_pos $ziel.txt") or die „konnte $ziel nicht oeffnen,$!\n“;

print OUTPUT „{@BATCH|$sachnummer||GOEPEL_BSCAN||KDSNR:blush:kundennummer|ICT||PB/PL_P|uqm161|||\n“;
print OUTPUT „{@BTEST|$seriennummer|$status|$starttest|||||n|n|$endetest||1|\n“;
print OUTPUT „{@RPT|$result}\n“;
print OUTPUT „{@RPT|$fehler}\n“ if $fehler;
close OUTPUT;
}

Kann mir jemand helfen???

BITTTEEEE!

Hallo,

ich wollte ein bestimmtes Verzeichnis öffnen und die Dateien,
die dort liegen nacheinander öffnen und durchsuchen, danach
diese unter anderem Namen dort oder auch wo anders
abspeichern!!

Du solltest immer am Anfang die beiden Zeilen

use strict;
use warnings;

benutzen und deine Variablen deklarieren.

Wenn du hier Code reinschreibst, dann bitte in

-Tags, damit die Tabulatoren erhalten bleiben.



> Kann mir jemand helfen???


Wobei? Was macht das Script, was es nicht sollte? Was sollte es tun?

Grüße,
Moritz

Hallo sanda,

ich wollte ein bestimmtes Verzeichnis öffnen und die Dateien,
die dort liegen nacheinander öffnen und durchsuchen, danach
diese unter anderem Namen dort oder auch wo anders
abspeichern!!

Kann mir jemand helfen???

Halte dich an die Tipps von Moritz. Da hagelt es schon mal Fehler, die Du alle beseitigen solltest.
Nur ein paar Hinweise:
$seriennummer, $kundennummer, $starttest, $endetest und $sachnummer haben keinerlei Wert, wenn ich das recht sehe, was willst Du da ausgeben?
$cbt sollte am Anfang initialisiert werden

my $cbt = 0

z.B., sonst ist es auch undefiniert, wenn

if ($line =~ /.CBT/gsm)

nicht zutrifft.
Was soll die Zeile

$hit;

bewirken?

Bei mir ist $quelle und $ziel immer gleich. Soll das so sein?

Mehr ist im Moment nicht zu machen.
Viele Grüsse
Klaus Bernstein

Das ist ein Prog, das eine Logdatei durchsucht, dieses Prog muss ich mit

perl search.pl dokument.log

aufrufen!!!
Nun will ich, dass man nicht immer nur einzelne Dateien aufrufen muss, sondern es liegen mehrere Dateien in einem Ordner, in dem es die Logdateien findet und nacheinander durchsucht!!??

$quelle = $ARGV[0];
$x = $ARGV[0];
$x =~ s/(\w+)\.\w+/$1/;
$ziel = $x;

open (INPUT,") 
{
 if (!$starttest && $line =~ /(\d\d)\.(\d\d)\.\d\d(\d\d)\s+(\d\d):frowning:\d\d):frowning:\d\d)/)
 { 
 $date = "$3$2$1";
 $starttest = "$3$2$1$4$5$6";
 } 
 if ($line =~ /.CBT/gsm) 
 { 
 $cbt = 1; 
 }
 elsif ($line =~ /BARCODE/gsm)
 {
 $barcode = 1; 
 }
 elsif ($line =~ /AATHD000000.000/gsm)
 {
 $falscheangabe = 1;
 } 
 elsif (!$endetest && $line =~ /(\d\d):frowning:\d\d):frowning:\d\d)\s+(?: P\sA\sS\sS|F\sA\sI\sL)/x)
 {
 $endetest = "$date$1$2$3";
 } 
 elsif (!$sachnummer && $line =~ /Sachnummer:\s(\w+)\./)
 {
 $sachnummer = $1;
 } 
 elsif (!$kundennummer && $line =~ /Kundennummer:\s\*(\d+)/)
 {
 $kundennummer = $1;
 } 
 elsif (!$seriennummer && $line =~ /Flexnummer:\s(\d\d).(\d\d\d\d).(\d\d\d\d)/sm)
 {
 $seriennummer = "$1$2$3";
 } 
 elsif ($line =~ /PASS/) 
 {
 $start\_pos = tell(INPUT);
 }
 elsif ($line =~ /FAIL/) 
 {
 $end\_pos = tell(INPUT);
 }
}

if ($end\_pos) 
{
 $status = '01';
 $result = 'Failed';

 seek(INPUT, $start\_pos, 0); 
 while ($line = ) 
 { 
 chomp($line); 

 last if $end\_pos $ziel.txt") or die "konnte $ziel nicht oeffnen,$!\n";

 print OUTPUT "{\@BATCH|$sachnummer||GOEPEL\_BSCAN||KDSNR:blush:kundennummer|ICT||PB/PL\_P|uqm161|||\n";
 print OUTPUT "{\@BTEST|$seriennummer|$status|$starttest|||||n|n|$endetest||1|\n";
 print OUTPUT "{\@RPT|$result}\n";
 print OUTPUT "{\@RPT|$fehler}\n" if $fehler;
 close OUTPUT;
}

Nun will ich, dass man nicht immer nur einzelne Dateien
aufrufen muss, sondern es liegen mehrere Dateien in einem
Ordner, in dem es die Logdateien findet und nacheinander
durchsucht!!??

opendir DIR, $directory;
rewinddir DIR;

while ( $file = readdir(DIR) ) {

HTH
Schorsch

opendir DIR, $directory;
rewinddir DIR;

while ( $file = readdir(DIR) ) {

wobei sich hier ein lexikalischer filehandle und my vor $file
anbieten würde. und natürlich fehlermeldung abfangen:

opendir my $dh, $directory or die $!;
while (my $file = readdir $dh) { ... }

und natürlich fehlermeldung abfangen:

Aber höchstens, wenn der Chef zuguckt!

Sind wir Männer oder Mäuse
Schorsch