Dateiname einlesen und verwenden
Kalle
- perl
Hi!
Habe folgendes Problem: Ich habe ganz viele Datein in einem Verzeichnis, die eine ähnliche Benennung aufweisen (var.accuracy.out). Der Teil var ist von Datei zu Datei unterschiedlich. Nun will ich, daß der Dateiname automatisch eingelesen wird und der Teilbis zum ersten Punkt in einer der Datei abgespeichert wird (anschließend soll der Inhalt der Datei noch dahinter gespeichert werden, aber das krieg ich glaub ich dann schon hin :) )
Danke, Kalle
Hi!
Habe folgendes Problem: Ich habe ganz viele Datein in einem Verzeichnis, die eine ähnliche Benennung aufweisen (var.accuracy.out). Der Teil var ist von Datei zu Datei
Anker setzen für Regexp!
^ Zirkumflex steht für string-Anfang
$ steht für String-ende
sowas wie =~ /^.+$./
sollte den Teil vom Anfang bis zum ersten Punkt rausfischen, wobei .+ für beliebig viele Zeichen steht.
ungeprüft.
--roro
hmm...
sowas wie =~ /^.+$./
besser...
my $s = 'var.accuracy.out';
$s =~ /^(\w+)./;
print "$1\n"; # var
Vorausgesetzt, im String vor dem ersten Punkt stehen Zeichen, die \w entsprechen (Buchstaben, Ziffern, Underscore).
--roro
Habe folgendes Problem: Ich habe ganz viele Datein in einem Verzeichnis, die eine ähnliche Benennung aufweisen (var.accuracy.out). Der Teil var ist von Datei zu Datei unterschiedlich. Nun will ich, daß der Dateiname automatisch eingelesen wird und der Teilbis zum ersten Punkt in einer der Datei abgespeichert wird (anschließend soll der Inhalt der Datei noch dahinter gespeichert werden, aber das krieg ich glaub ich dann schon hin :) )
kann es sein das du den diamant Operator suchst?
In deinem Fall dürfte in etwa sowas rauskommen:
open F, ">test.txt";
while(<*.accuracy.out>)
{
/(.*)\.accuracy\.out/;
print F $1;
open F2, $_;
print F join "", <F2>;
close F2;
}
close F;
Da muss nur noch ein chomp eingebaut werden um die Newlinezeichen aus den Dateien zu entfernen.
Struppi.
Hey,
kleine Korrektur:
diamant Operator
Diamantoperator ist gleich readline-Funktion, siehe http://perldoc.perl.org/functions/readline.html und http://perldoc.perl.org/perlop.html#I%2FO-Operators-operator%2C-i%2Fo-operator%2C-io-io-while-filehandle-<>-%40ARGV
while(<*.accuracy.out>)
Das hier ist aber die glob-Funktion, und es ist guter Stil, sie auch mit dem Namen zu schreiben, siehe http://perldoc.perl.org/functions/glob.html und http://perldoc.perl.org/File/Glob.html
kleine Korrektur:
sehr schön, wieder was gelernt (da hatte ich wohl einige Ausdrücke durcheinander geworfen)
Perl ist schon toll ;-)
Struppi.
Danke für die Hilfe, auch wenn ich sie nicht verstanden habe! Hab es jetzt aber doch noch anders hinbekommen, nämlich mit dem split-Befehl.
lg Kalle
Danke für die Hilfe, auch wenn ich sie nicht verstanden habe! Hab es jetzt aber doch noch anders hinbekommen, nämlich mit dem split-Befehl.
Der split Befehl liest aber keine Dateinamen???
Hab ich deine Frage falsch verstanden?
Struppi.
Hell-O!
Der split Befehl liest aber keine Dateinamen???
Wieso, du machst mit dem RegExp nichts anderes:
while(<*.accuracy.out>)
{
/(.*)\.accuracy\.out/;
print F $1;
}
Und das geht halt auch mit split:
while(<*.accuracy.out>) {
print F ((split /\./, $s)[0]);
}
(oder ähnlich)
Hab ich deine Frage falsch verstanden?
Nein, glaube ich nicht.
Siechfred
Der split Befehl liest aber keine Dateinamen???
Wieso, du machst mit dem RegExp nichts anderes:
Das einlesen der Dateinamen erfolgt mit dem glob Operator oder Funktion und nicht mit der RegExp
Hab ich deine Frage falsch verstanden?
Nein, glaube ich nicht.
Ich hatte ihn die Frage so gelesen, dass er Wissen wollte wie er die Dateinamen filtert.
Struppi.
Der split Befehl liest aber keine Dateinamen???
Wieso, du machst mit dem RegExp nichts anderes:
Das einlesen der Dateinamen erfolgt mit dem glob Operator oder Funktion und nicht mit der RegExp
Missverständlich ausgedrückt, ja. Aber die zwei dargestellten Varianten sollten doch gezeigt haben, worauf ich hinauswollte.
Ich hatte ihn die Frage so gelesen, dass er Wissen wollte wie er die Dateinamen filtert.
Und zusätzlich den variablen Teil wegschreibt. Hier verwendest du einen Regulären Ausdruck, der OP hat es offensichtlich mit split gemacht.
Siechfred