Thread Problem beim taggen einer Datei via zweiter Datei. (6 answers)
Opened by efbe at 2008-06-02 22:19

topeg
 2008-06-02 23:24
#110652 #110652
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
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.

View full thread Problem beim taggen einer Datei via zweiter Datei.