Perl如和生成这种格式的序列?有三个文本文件,里面分别有不同的元素若干个,分别代表了生成序列前三位的可能性.1.txt中有:aac abc acc adc .2.txt中有:bxa bxab byc bssxd .3.txt中有:efg hij lmop adc .现
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/17 23:52:58
Perl如和生成这种格式的序列?有三个文本文件,里面分别有不同的元素若干个,分别代表了生成序列前三位的可能性.1.txt中有:aac abc acc adc .2.txt中有:bxa bxab byc bssxd .3.txt中有:efg hij lmop adc .现
Perl如和生成这种格式的序列?
有三个文本文件,里面分别有不同的元素若干个,分别代表了生成序列前三位的可能性.
1.txt中有:aac abc acc adc .
2.txt中有:bxa bxab byc bssxd .
3.txt中有:efg hij lmop adc .
现在每次要生成20个,随机的,长短不一的混合的序列格式如下:
XX1-XX2-XX3 当序列有3位时,每一位分别从3个文本文件中随机.
XX1-XX2 当序列有2位时,第一位从1.txt中随机,第二位从2.txt中随机.
XX1 当序列有1位时,这一位只能从1.txt中随机.
例如:
aac-bxab-efg
adc
acc-bssxd
acc-bxa-lmop
.
请问代码怎么写?
Perl如和生成这种格式的序列?有三个文本文件,里面分别有不同的元素若干个,分别代表了生成序列前三位的可能性.1.txt中有:aac abc acc adc .2.txt中有:bxa bxab byc bssxd .3.txt中有:efg hij lmop adc .现
use strict;
my $howManyTimes = 1 ; # 每次即是要几多次 ?
my $howManyElementsPerRound = 20; # 每次要生成20个
my $maxChainSize = 3; # 当序列有 x 位时
my $e = {};
sub random { # random ( $min, $max )
my ( $min, $max ) = @_;
my $try = undef;
do { $try = int (rand ( $max+1 )) }
until ( $try >= $min && $try <= $max ) ;
return $try;
}
sub makeFiles {
for ( 1..3 ) {
open F, ">$_.txt";
for my $make ( 1..50 ) {
my $genLen = random ( 3, 4 ) ;
for my $len ( 1 .. $genLen ) {
print F chr(random( 97, 122 )) ;
} print F " ";
} close F;
}
}
sub loadFiles {
for my $f ( 1..3 ) {
open F, "$f.txt" or die "Can't open $f.txt";
chomp ( my @data = <F> ) ;
close F;
push @{$e->{$f}}, split /\s+/, $_ foreach @data;
}
}
#makeFiles; # 见下文注解
loadFiles;
for my $times ( 1..$howManyTimes ) {
for my $round ( 1.. $howManyElementsPerRound ) {
my $str = "";
my $roundLen = random ( 1, $maxChainSize ) ;
for my $SizeAlsoFile ( 1 .. $roundLen ) {
my $arrayLen = $#{$e->{$SizeAlsoFile}} ;
my $elemPos = random ( 0 .. $arrayLen );
$str .= $e->{$SizeAlsoFile}[$elemPos] . "-";
}
chop $str;
#print "Round:$round, Len:$roundLen: $str$/"; # 用来验证的
print "$str$/"; # 照你的要求输出
}
print $/
}
makeFile 是我自已生成的 3 个档, 给你参巧我所理解你档案的内容是怎样的