Thread Dateien durchsuchen
(29 answers)
Opened by Paul at 2013-01-30 21:28
Soweit ich es verstanden habe:
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 #!/usr/bin/perl use strict; use warnings; my $OUTPATH=''; my $A=''; my $B=''; my $C=''; open(my $temp_fh, '<', "$OUTPATH/$B") or die("Can't open $B ($!)\n"); my @referenz=<$temp_fh>; close($temp_fh); open(my $out_fh, '>', "$OUTPATH/$C") or die("Can't open $C ($!)\n"); open(my $in_fh, '<', "$OUTPATH/$A") or die("Can't open $A ($!)\n"); MAINLOOP: while(my $line = <$in_fh>) { my $value=substr($line,0,20); $value+=0; for my $ref_line (@referenz) { if($ref_line =~ /$value/) { print $out_fh $ref_line; next MAINLOOP; } } print $out_fh $line; } close($in_fh); close($out_fh); Merke dir: - Führe eine 'teure' Aktion möglichst nur einmal aus. - Mach so wenig wie möglich. - Speichere so wenig wie möglich, aber so viel wie nötig. Nach den Prämissen:
Das kann man noch beschleunigen: 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 #!/usr/bin/perl use strict; use warnings; my $OUTPATH=''; my $A=''; my $B=''; my $C=''; my %index; open(my $temp_fh, '<', "$OUTPATH/$B") or die("Can't open $B ($!)\n"); MAINLOOP: while(my $line=<$temp_fh>) { while($line=~/(\d+)/gc) { my $value=$1; $value+=0; next if(exists($index{$value})); $index{$value}=$line; next MAINLOOP; } } close($temp_fh); open(my $out_fh, '>', "$OUTPATH/$C") or die("Can't open $C ($!)\n"); open(my $in_fh, '<', "$OUTPATH/$A") or die("Can't open $A ($!)\n"); while(my $line = <$in_fh>) { my $value=substr($line,0,20); $value+=0; if(exists($index{$value})) { print $out_fh $index{$value}; next; } print $out_fh $line; } close($in_fh); close($out_fh); Ich erzeuge einen Index mit der Zuordnung 'Zahl' => 'Zeile' Das benutze ich dann um die heraus gelesenen Zahlen zu vergleichen. Das funktioniert aber nur wenn es Integerzahlen und keine Fließkommazahlen sind. Aber auch dafür gäbe es Lösung, dazu müsste ich aber genauer wissen, um welche Werte es sich handelt. Last edited: 2013-01-31 19:58:55 +0100 (CET) |