PDA

Visualizza la versione completa : Dividere un array in tante parti, da scrivere


Fonchia
14-10-2008, 17:22
Ciao a tutti,

sono nuova al Perl e sto cercando di fare un'operazione banale...ma che mi sta facendo diventare matta.
Ho un array formato da circa 41 mila elementi. Voglio dividere il mio array in 17 parti, ed ognuna di queste parti voglio scriverla in un file diverso. Ho scritto il seguente script, che ovviamente non funziona:

################################################## ###############
#!/usr/bin/perl

use strict;
use warnings;

my $file=$ARGV[0]; #il file da cui mi ricavo i 41 mila elementi.
open (FILE, "<$file") || die "cannot open $file";

my @data=<FILE>;

foreach my $name (@data){
chomp $name;
$name=~s/\r\n\s+\t//g;
my @slice;
for (my $j=0;$j<=16;$j++){
for (my $i=0;$i<=2499;$i++){

$slice[$j][$i]=split(", ",$name);

}
}
print "$slice[0][0]\n";
}

close FILE;
################################################## ####################

La mia idea era quella di creare un array di array, e poi printare ciascun array in un file diverso....
Esiste un modo piu' semplice? Dove sbaglio nel fare questo?
Vi prego, sono esasperata.......:dh:

Grazie in anticipo!
Ciao!

MARTEDI
14-10-2008, 21:01
a quanto sembra dal tuo codice, i 41.000 elementi del tuo file sono fra loro separati da un "vai a capo". Se cos :


#!/usr/bin/perl
my $file=$ARGV[0]; #il file da cui ricavo i 41 mila elementi.
open (FILE, "<$file") || die "cannot open $file";
my $i=0;
my $j=0;
open (PROG,">file$j.txt");
while (<FILE>)
{
if ($i==2499) #cambi questo nr sei vuoi ridurre/aumentare il nr dei files
{
$j++;
$i=0;
close (PROG);
open (PROG,">file$j.txt");
}
print PROG $_;
$i++;
}
close (PROG);
close (FILE);

Loading