The UNIX and Linux Forums  


Go Back   Die UNIX-und Linux-Foren > Top Foren > Shell Programmierung und Scripting
.
Google unix.com



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

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Suche diesen Thread Rate Thread Anzeige-Modi
  #1 (permalink)  
Old 07-16-2008
Figaro figaro is offline
Registrierte Nutzer
  
 

Join Date: Jan 2007
Beiträge: 268
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?
  #2 (permalink)  
Old 07-16-2008
KevinADC KevinADC is offline Forum Advisor  
Registrierte Nutzer
  
 

Join Date: Jan 2008
Beiträge: 731
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.
  #3 (permalink)  
Old 07-16-2008
KevinADC KevinADC is offline Forum Advisor  
Registrierte Nutzer
  
 

Join Date: Jan 2008
Beiträge: 731
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 +)?
  #4 (permalink)  
Old 07-17-2008
Figaro figaro is offline
Registrierte Nutzer
  
 

Join Date: Jan 2007
Beiträge: 268
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..
  #5 (permalink)  
Old 07-17-2008
KevinADC KevinADC is offline Forum Advisor  
Registrierte Nutzer
  
 

Join Date: Jan 2008
Beiträge: 731
den Punkt zu entkommen dann, wie die anderen Punkt in der regexp:

my% files \u003d map (/ ^ (\ w +) \. \ d (6) \. csv $ /, $ _ \u003d> $ 1) <*. csv>;
  #6 (permalink)  
Old 07-17-2008
ghostdog74 ghostdog74 is offline Forum Advisor  
Registrierte Nutzer
  
 

Join Date: Sep 2006
Beiträge: 2555
Wenn die Datei-Namen sind immer Namen wie scores.234506.csv, können Sie einfach über die Punkte geteilt und dann Array element 1. Das sollte Ihre Nummer. Einfacher als regexp.
  #7 (permalink)  
Old 07-18-2008
KevinADC KevinADC is offline Forum Advisor  
Registrierte Nutzer
  
 

Join Date: Jan 2008
Beiträge: 731
Split () ist eine regexp.
Closed Thread

Lesezeichen

Tags
perl, perl regex, regex

Thread Tools Suche diesen Thread
Suche diesen Thread:

Erweiterte Suche
Anzeige-Modi Rate this thread
Rate this thread:

Forumregeln
Du möglicherweise nicht neue Themen
Du möglicherweise nicht nach Antworten
Du möglicherweise nicht post-Anlagen
Du möglicherweise nicht bearbeiten Sie Ihre Beiträge

BB-Code ist Auf
Smilies sind Auf
[IMG] Code Auf
HTML-Code ist Aus
Trackbacks sind Auf
Pingbacks sind Auf
Refbacks sind Auf




Alle Zeiten sind GMT -4. Es ist jetzt 06:44 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Ltd. Sprachliche Übersetzungen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Die UNIX-und Linux-Foren Content © Copyright 1993-2009. Alle Rechte Reserved.Ad Management von RedTyger

Content Relevant URLs durch vBSEO 3.2.0