Thread Bestimmte array Elemente löschen
(9 answers)
Opened by falke13 at 2011-05-24 09:12
Hm Ja pq hat recht dies ist das perl6-Forum
Mein Lösung ist Perl5. Habe ich beim antworten übersehen :-/ Ich lasse es mal dennoch drin. Ungetestet: Wenn die Reihenfolge egal ist: 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 !/usr/bin/perl use strict; use warnings; my $file_in='test.txt'; my $file_out='test.out.txt'; my %order; { open(my $fh, '<', $file_in) or die("ERROR open $file_in ($!)\n"); while(my $line=<$fh>) { if(my ($name)=$line=~/(\w+)\.xml\.gz/) { push(@{$order{$name}},$line); } } close($fh); } my @data; for my $arr (values(%order)) { shift(@$arr) while(@$arr>2); push(@data,@$arr); } { open(my $fh, '>', $file_out) or die("ERROR open $file_out ($!)\n"); print $fh @data; close($fh); } Wenn die Reihenfolge erhalten bleiben soll: 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 !/usr/bin/perl use strict; use warnings; my $file_in='test.txt'; my $file_out='test.out.txt'; my @data; { open(my $fh, '<', $file_in) or die("ERROR open $file_in ($!)\n"); while(my $line=<$fh>) { push(@data,$line); if(my ($name)=$line=~/(\w+)\.xml\.gz/) { push(@{$order{$name}},$#data); } } close($fh); } for my $arr (values(%order)) { while(@$arr>2) { my $pos=shift(@$arr); splice(@data,$pos,1); } } { open(my $fh, '>', $file_out) or die("ERROR open $file_out ($!)\n"); print $fh @data; close($fh); } Last edited: 2011-05-24 11:40:01 +0200 (CEST) |