in reply to Randomize CSV word lists
I tried the following on (a copy of) a csv dump of my last bank statement -- seems to do the job (could make taxes interesting this year...)
BTW, I suppose Fisher_Yates is good enough, but my own favorite has always been to prepend a random number to the string (default output of rand() is between 0.0 and 0.999...), then sort, then remove the random number.
use strict; my @transpose; # this will be an array of arrays my $ncols = 0; while (<>) { chomp; my @cols = split(/,/); if ( $ncols ) { die "Line $. doesn't have $ncols columns\n" if ( $ncols != scalar @cols ); } else { $ncols = scalar @cols; } foreach my $i (0..$#cols) { push( @{$transpose[$i]}, $cols[$i] ); } } my $nrows = $.; for (0..$ncols-1) { &fisher_yates_shuffle( $transpose[$_] ); } foreach my $i (0..$nrows-1) { my @cols = (); foreach my $j (0..$ncols-1) { push( @cols, $transpose[$j][$i] ); } print join( ",", @cols ) . "\n"; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: Randomize CSV word lists
by Juerd (Abbot) on Apr 05, 2002 at 06:33 UTC | |
|
Re: Re: Randomize CSV word lists
by Grendel2112 (Initiate) on Apr 05, 2002 at 13:19 UTC |