![]() |
|
|
Google unix.com
|
|||||||
| Foren | Registrieren | Forum-Regeln | Links | Alben | FAQ | Benutzerliste | Kalender | Suche | Die heutige Beiträge | Alle Foren als gelesen markieren |
| Shell Programmierung und Scripting Post Fragen zu ksh, csh, sh, bash, Perl, PHP, sed, awk und anderen Shell-Skripte und Shell-Scripting-Sprachen hier. |
Mehr UNIX-und Linux-Forum Themen Vielleicht finden Sie hilfreiche
|
||||
| Faden | Thread Starter | Forum | Antworten | Last Post |
| regex Frage | xiamin | Shell Programmierung und Scripting | 3 | 03-05-2009 02:53 AM |
| Perl regex Hilfe - passender Klammern | CVP | Shell Programmierung und Scripting | 7 | 02-27-2009 05:38 PM |
| Wie kann ich Streifen dieser Zeile mit perl regex. | ramky79 | Shell Programmierung und Scripting | 1 | 03-18-2008 12:10 PM |
| regex Frage | arushunter | Shell Programmierung und Scripting | 8 | 01-04-2007 05:49 PM |
| regex Frage | rocketkids | UNIX for Dummies Questions & Answers | 6 | 02-12-2004 05:49 AM |
![]() |
|
|
LinkBack | Thread Tools | Suche diesen Thread | Rate Thread | Anzeige-Modi |
|
|
|
||||
|
Perl regex Frage
Ich habe den folgenden Code ein: Code:
#!/usr/bin/perl -w
@files = <*.csv>;
foreach $file (@files) {
open(FH, $file) || die("Error: Cannot open file $file for reading.");
my @dt = ($file =~ /^(\w+).(\d{6})\.csv$/);
while (<FH>) {
print "@dt[0] $_\n";
}
close(FH);
}
Es ist Redundanz in diesem Code, da es zunächst für alle Dateien mit der Endung ". Csv" (Linie 3) und anschließend analysiert den Dateinamen (Linie 6) Suche nach Zeichen und Ziffern. Wie ändere ich Linie 3 in einen regulären Ausdruck, so dass die Linie 6 entfernt werden können und das Array @ dt ermittelt werden es? |
|
||||
|
Sie können nicht. Und es ist wirklich keine Redundanz als glob <> zunächst alle Dateien mit der Endung. Csv-Erweiterung, so können Sie sie, die regexp dann analysiert die Saiten (die Dateinamen) zu extrahieren mehr Informationen.
|
|
||||
|
Nun, ich kam mit dieser, aber es kann nicht sein effizienter als das, was Sie hatten und vielleicht sogar weniger effizient wären, hätten Sie die beiden Benchmark-Codes, um zu wissen, ist wirklich besser. Code:
my %files = map {/^(\w+).\d{6}\.csv$/; $_ => $1} <*.csv>;
print Dumper \%files;
foreach my $file (keys %files) {
open(FH, $file) || die("Error: Cannot open file $file for reading.");
while (<FH>) {
print "$files{$file} $_\n";
}
close(FH);
}
dieser regexp wahrscheinlich muss der Raffination: / ^ (\ w +). \ d (6) \. csv $ / Was ist der Punkt in der es für die Zeit nach (\ w +)? |
|
||||
|
Vielen Dank für Ihre Antwort und haben ebenfalls versucht, mit dieser ein wenig. Performance-Gewinn (oder Verlust) ist gering. Bin immer noch auf einen eingebauten Timer, aber die Differenz ist nur Sekunden (wenn vorhanden) auf einer Gesamtfläche von etwa 200 Körper Dateien und kombiniert mit 40MB.
Und der Punkt (.) Ist der Teil der Datei-Name: w + ist die Standard-Dateinamen und d (6) als 24-Stunden-Zeit von der Zeit der Download. So eine Datei hätte einen Namen wie: scores.234506.csv Zuletzt bearbeitet von Figaro; am 07-17-2008 02:09 PM.. |
![]() |
| Lesezeichen |
| Tags |
| perl, perl regex, regex |
| Thread Tools | Suche diesen Thread |
| Anzeige-Modi | Rate this thread |
|
|