Thread Bestimmte array Elemente löschen (9 answers)
Opened by falke13 at 2011-05-24 09:12

topeg
 2011-05-24 11:32
#149086 #149086
User since
2006-07-10
2611 Artikel
BenutzerIn

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

View full thread Bestimmte array Elemente löschen