Hallo zusammen,
ich habe nun folgendes Problem. Mein Program soll die Anzahl der logfiles in einer Datei zählen und die Namen in der Datei enthaltenen files.log ausgeben. In der Eingabeaufforderung funktioniert es einwandfrei. Das Programm schreibt aber in die Datei files.log nur die anzahl der Files rein, aber nicht die Namen der Files.
Was habe ich falsch gemacht?
Hier ist der Code
#!/usr/bin/perl
open (out,"\>files.log");
# $directory = "C:\Bernd\testfile";
# chdir("C:\Bernd\testfile");
opendir(DIR,"C:\\temp") or die "Can't open directory: $!";
# @a=readdir(DIR);
# my @Eintraege = grep( !/^\.\.?$/, readdir(DIR));
my @Eintraege = grep( /\.log$/ , readdir(DIR));
closedir(DIR);
# chdir("C:\testfile");
my $anzahleintraege = @Eintraege;
print(out"Anzahl Files in " .$anzahleintraege. "\n");
print (out @Eintraege. "\n");
print "Anzahl Files ist " .$anzahleintraege ;
print (@Eintraege);
#print join(out,@Eintraege);
# print join(" ",@a);
[MOD]: code- in pre-tags umgewandelt
Hallo,
#!/usr/bin/perl
open (out,">files.log");
$directory = „C:\Bernd\testfile“;
chdir(„C:\Bernd\testfile“);
opendir(DIR,„C:\temp“) or die „Can’t open directory: $!“;
@a=readdir(DIR);
my @Eintraege = grep( !/^..?$/, readdir(DIR));
my @Eintraege = grep( /.log$/ , readdir(DIR));
closedir(DIR);
Den Spass kannst du auch kuerzer als
my @Eintraege = glob "C:\\temp\\*.log";
schreiben (bekommst aber im Falle eines Fehlers keine so schoene Fehlermeldung mehr).
chdir(„C:\testfile“);
my $anzahleintraege = @Eintraege;
print(out"Anzahl Files in " .$anzahleintraege. „\n“);
print (out @Eintraege. „\n“);
Wenn du @Eintraege . „\n“ schreibst, setzt du @Eintraege in den skalaren Kontext, das ergibt die Anzahl der Eintraege. Wenn du statt des Punktes ein Komma schreibst sollte es gehen.
Gruesse,
Moritz
Es funktioniert, funktioniert…
)
supi, vielen vielen Dank…
))
Hallo,
jedoch ich habe ich noch ein kleines Problem. Das Programm schreibt mir zwar alle Werte des Array ain die Datei Files.log rein, aber alles in einer Zeile. Wie schaffe ich es, dass Sie untereinander ausgegeben werden.
Hier mein leicht veränderter Code
#!/usr/bin/perl
open (out,"\>files.log");
# $directory = "C:\Bernd\testfile";
# chdir("C:\Bernd\testfile");
opendir(DIR,"C:\\temp") or die "Can't open directory: $!";
# @a=readdir(DIR);
# my @Eintraege = grep( !/^\.\.?$/, readdir(DIR));
my @Eintraege = grep( /\.log$/ , readdir(DIR));
closedir(DIR);
# chdir("C:\testfile");
my $anzahleintraege = @Eintraege;
print(out"Anzahl Files in " .$anzahleintraege. "\n");
print (out @Eintraege,"\n");
print "Anzahl Files ist " .$anzahleintraege ;
print (@Eintraege);
#print join(out,@Eintraege);
# print join(" ",@a);
Hallo,
jedoch ich habe ich noch ein kleines Problem. Das Programm
schreibt mir zwar alle Werte des Array ain die Datei Files.log
rein, aber alles in einer Zeile. Wie schaffe ich es, dass Sie
untereinander ausgegeben werden.
siehe: „$,“ in http://perldoc.perl.org/perlvar.html
IO::Handle->output_field_separator EXPR
$OUTPUT_FIELD_SEPARATOR
$OFS
$,
Beispiel:
...
my $dir = 'c:/temp';
opendir my $dh, $dir or die "can't open directory: $!";
my @Eintraege = grep /\.log$/, readdir $dh;
closedir $dh;
my $heading = "Anzahl Files in $dir: " . @Eintraege; # @Eintraege =\> scalar
local $, = "\n"; # set output field separator for print to \n
open my $out ,'\>', 'files.log' or die "can't write: $!";
print $out $heading, @Eintraege;
close $out;
print $heading, @Eintraege;
...
Grüße
CMБ