#!/usr/bin/perl -w #use Win32::Clipboard; open INPUT, "<$ARGV[0]"; @lines = ; chomp @lines; close INPUT; %hash = (); $samples = $ARGV[1]; ($tupel, $all)= split (" ", shift(@lines)); warn "tupellaenge: $tupel, tupelanzahl: $all\n"; foreach $line (@lines) { if ($tupel <= 1) { $x1 = ""; ($x2, $x3) = split " ", $line; } else { ($x1, $x2, $x3) = split " ", $line; } $hash{ $x1 }{ $x2 } = $x3; } warn "einlesen fertig\n"; @keys = sort keys %hash; $zufall = int rand $all; $sum = 0; $i = 0; while ($sum + $hash{$keys[$i]}{'ALL'} < $zufall) { $sum += $hash{$keys[$i]}{'ALL'}; $i++; } $ausgabe = $keys[$i]; $schluessel = $keys[$i]; for ($i = 0; $i < $samples; $i++) { $zufall = int rand $hash{$schluessel}{'ALL'}; $sum = 0; foreach $j (sort keys %{$hash{$schluessel}}) { next if ($j eq 'ALL'); $letter = $j; last if ($hash{$schluessel}{$j} + $sum >= $zufall); $sum += $hash{$schluessel}{$j}; } $ausgabe .= $letter; $schluessel = substr($schluessel, 1) . $letter; } $ausgabe =~ s/_/ /g; print "$ausgabe\n"; ## the following is not appicable on non-Win32-systems. #Win32::Clipboard::Set($ausgabe);