Thread Problem beim taggen einer Datei via zweiter Datei.
(6 answers)
Opened by efbe at 2008-06-02 22:19
Nach den anderen Vorschlägen meiner:
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 #!/usr/bin/perl use strict; use warnings; my $file_in = 'svc_test_sdl.txt'; my $file_out = 'svc_test_sdl.out.txt'; my $file_test = 'koroesi.txt'; my %koroesi; # Datei öffnen # (wenn es nicht geht enthält $! die Fehlermeldung) open(my $fh,'<',$file_test) or die "konnte $file_test nicht öffnen! ($!)\n"; # Datei zeilenweise einlesen while(my $verb=<$fh>) { # "\n" am ende entfernen, # wenn vorhanden chomp($verb); # Hash füllen $koroesi{$verb}=1; } close($fh); # Wenn man ein Array nimmt um alle Zeilen zu speichern, # dann verbraucht man auch eine menge Speicher. # Da ist es besser die datei Zeilenweise zu bearbeiten. # Eingabedatei öffnen open(my $fh_in,'<',$file_in) or die "konnte $file_in nicht öffnen! ($!)\n"; # Ausgebedatei öffnen open(my $fh_out,'>',$file_out) or die "konnte $file_out nicht öffnen! ($!)\n"; while(my $line=<$fh_in>) { chomp($line); # Zeile zerlegen my($noun, $verb, $number)=$line=~/^(.+?)\s+(.+?)\s+(.+?)$/; # so geht es natürlich auch: # my($noun, $verb, $number)=split(/\s+/,$zeile); # wenn das wort im Hash als Schlüssel existiert if(exists($koroesi{$verb})) { # dann neue Zeile erzeugen $line = "$noun [$verb] $number"; } # das ganze in die neue Datei schreiben print $fh_out $line."\n"; } # Ausgabedatei schließen close($fh_out); # Eingabedatei schließen close($fh_in); Wie schon gesagt bei großen Dateien ist es besser Zeilenweise zu arbeiten. Nutze "use strict;" und "use warnings;" Zeilenumbrüche entfernen, sonst kann der Vergleich nicht klappen! Ich halte es bei 170MB Daten nicht für sinnvoll die Ausgabe in die Konsole zu machen. Das direkte Zurückschreiben in eine Datei ist da sinnvoller. |