请帮我简化一下这个程序 (perl的初学者)酷爱perl 100分

haokk 2002-07-20 03:21:54
这个程序用来把一个大文件分成10个小文件,大文件的格式如后,现在我写的这个程序那么多的if,elsif,我想把它给简化一下,请帮忙啊.我是初学者.
my $i=0; #count how many seq
my $n=2; #set how many seq in one file .
my $j=0; #count how many lines

#判段输入命令格式
if (-e $ARGV[0]){
open(INFILE ,"$ARGV[0]");
}else{
print " $! Useage : \n perl trim.pl filename!";
exit;
}

#得到当前格式化时间
sub sub_format_datetime
{
local($sec, $min, $hour, $day, $mon, $year) = @_[0..5];
sprintf("%4d-%02d-%02d %02d:%02d:%02d", $year+1900, $mon+1, $day, $hour, $min, $sec);
};

#当前时间
$Time_Start = sub_format_datetime(localtime(time()));
print "Now = $Time_Start\n";
print "\n";

#计算行数和seq 的条数,并按每$n个seq放一个文件
sub count_line_seq{

while($line=<INFILE>){

if($line=~m/^>.*/){
$i++;
}
$j++;
if($i<=$n*1){
open(OUTFILE,">>trim_seq_1.seq");
print OUTFILE $line;
close(OUTFILE);
}elsif($i<=$n*2){
open(OUTFILE,">>trim_seq_2.seq");
print OUTFILE $line;
close(OUTFILE);
}elsif($i<=$n*3){
open(OUTFILE,">>trim_seq_3.seq");
print OUTFILE $line;
close(OUTFILE);
}elsif($i<=$n*4){
open(OUTFILE,">>trim_seq_4.seq");
print OUTFILE $line;
close(OUTFILE);
}elsif($i<=$n*5){
open(OUTFILE,">>trim_seq_5.seq");
print OUTFILE $line;
close(OUTFILE);
}elsif($i<=$n*6){
open(OUTFILE,">>trim_seq_6.seq");
print OUTFILE $line;
close(OUTFILE);
}elsif($i<=$n*7){
open(OUTFILE,">>trim_seq_7.seq");
print OUTFILE $line;
close(OUTFILE);
}elsif($i<=$n*8){
open(OUTFILE,">>trim_seq_8.seq");
print OUTFILE $line;
close(OUTFILE);
}elsif($i<=$n*9){
open(OUTFILE,">>trim_seq_9.seq");
print OUTFILE $line;
close(OUTFILE);
}else{
open(OUTFILE,">>trim_seq_10.seq");
print OUTFILE $line;
close(OUTFILE);
}
}
close(INFILE);
}

&count_line_seq;


#程序运行到现在的时间
$Time_End = sub_format_datetime(localtime(time()));
print "Running from [$Time_Start] to [$Time_End]\n";
print("............................................................\n");

#给出条数
print "total is $i seq. \n $j lines. ";>aesfeawfdsafds
gfdaaattt
fdsagfd
fggsgfsg
>bfdsgfhgfjytrhtr
dfsafdhgfrehgfs
fdsahgrfes
>cgdsfgfhf
dfsgfdshgfd
>retgfggf
gffggf
>rtytrhthht
gfhhd
>hgfdhgf
hggfj
>dhgfjtr
hgfdjgfjtfh
>hgfdjy
hgjuyyj
>ghjkoipoppooppo
gfghmjnxreyt
>hjtgrkjuoiuy
hfuwertbvfvjyt
>hjgtrkuoyoius
fdberwgbfd
>htgrdjytr
hgfjhgjk

...全文
79 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
haokk 2002-07-21
  • 打赏
  • 举报
回复
谢谢你的指导,经过我的少许修改和测试后可以运行.那就把分给你吧.
my $filenum = 1;

my $count_seq=0; #count how many seq
my $howmany_seq_file= 2 ; #set how many seq in one file
my $count_line=0; #count how many lines
my $this_count_seq=0; #count current seq

#判段输入命令格式
if (-e $ARGV[0]){
open(INFILE ,"$ARGV[0]");
}else{
print " $! Useage : \n perl trim.pl filename!";
exit;
}

#得到当前格式化时间
sub sub_format_datetime
{
local($sec, $min, $hour, $day, $mon, $year) = @_[0..5];
sprintf("%4d-%02d-%02d %02d:%02d:%02d", $year+1900, $mon+1, $day, $hour, $min, $sec);
};

#当前时间
$Time_Start = sub_format_datetime(localtime(time()));
print "Time_Start = $Time_Start\n";


#计算行数和seq 的条数,并按每$n个seq放一个文件
sub count_line_seq{
open(OUTFILE, ">>trim_seq_$filenum.seq") || die "File open error!";
while($line=<INFILE>){
if($line=~m/^>.*/){
$count_seq++;
$this_count_seq++; # SEQ 计数
if ($this_count_seq > $howmany_seq_file) {
$filenum++; # 文件编号+1
$this_count_seq = 1; # 当前 SEQ 计数复位
close(OUTFILE); # 下一个 SEQ 已经开始时关闭前一个文件
open(OUTFILE, ">>trim_seq_$filenum.seq") || die "File open error!";
print "it is writing data to trim_seq_$filenum.seq ...\n";
}
}
$count_line++;
print OUTFILE $line;
$filenum = 10 if($filenum > 10);

}
close(INFILE);
close(OUTFILE);
}

&count_line_seq;


#程序运行到现在的时间
$Time_End = sub_format_datetime(localtime(time()));
print "Time_End = $Time_End \n";

#给出结果
print "It has $count_seq sequences.\nIt has $count_line lines.\n";
haokk 2002-07-20
  • 打赏
  • 举报
回复
有点问题 啊 ,那个文件后的变量自己怎麽变啊,又不在循环内.
AllCHN 2002-07-20
  • 打赏
  • 举报
回复
再精简一点,功能不变:

my $filenum = 1;

my $i=0; #count how many seq
my $n=2; #set how many seq in one file .
my $j=0; #count how many lines

#判段输入命令格式
if (-e $ARGV[0]){
open(INFILE ,"$ARGV[0]");
}else{
print " $! Useage : \n perl trim.pl filename!";
exit;
}

#得到当前格式化时间
sub sub_format_datetime
{
local($sec, $min, $hour, $day, $mon, $year) = @_[0..5];
sprintf("%4d-%02d-%02d %02d:%02d:%02d", $year+1900, $mon+1, $day, $hour, $min, $sec);
};

#当前时间
$Time_Start = sub_format_datetime(localtime(time()));
print "Now = $Time_Start\n";
print "\n";

#计算行数和seq 的条数,并按每$n个seq放一个文件
sub count_line_seq{
my $thiscount = 0;
open(OUTFILE, ">>trim_seq_$filenum.seq") || die "File open error!";
while($line=<INFILE>){
if($line=~m/^>.*/){
$i++;
$thiscount++; # SEQ 计数
if ($thiscount >= $n) {
$filenum++; # 文件编号+1
$thiscount = 0; # SEQ 计数复位
close(OUTFILE); # 下一个 SEQ 已经开始时关闭前一个文件
open(OUTFILE, ">>trim_seq_$filenum.seq") || die "File open error!";
}
}
$j++;
print OUTFILE $line;
$filenum = 10 if($filenum > 10);
}
close(INFILE);
close(OUTFILE);
}

&count_line_seq;


#程序运行到现在的时间
$Time_End = sub_format_datetime(localtime(time()));
print "Running from [$Time_Start] to [$Time_End]\n";
print("............................................................\n");

#给出条数
print "total is $i seq. \n $j lines. ";
AllCHN 2002-07-20
  • 打赏
  • 举报
回复
改进:

my $filenum = 1;

my $i=0; #count how many seq
my $n=2; #set how many seq in one file .
my $j=0; #count how many lines

#判段输入命令格式
if (-e $ARGV[0]){
open(INFILE ,"$ARGV[0]");
}else{
print " $! Useage : \n perl trim.pl filename!";
exit;
}

#得到当前格式化时间
sub sub_format_datetime
{
local($sec, $min, $hour, $day, $mon, $year) = @_[0..5];
sprintf("%4d-%02d-%02d %02d:%02d:%02d", $year+1900, $mon+1, $day, $hour, $min, $sec);
};

#当前时间
$Time_Start = sub_format_datetime(localtime(time()));
print "Now = $Time_Start\n";
print "\n";

#计算行数和seq 的条数,并按每$n个seq放一个文件
sub count_line_seq{
my $thiscount = 0;
open(OUTFILE, ">>trim_seq_$filenum.seq") || die "File open error!";
while($line=<INFILE>){
if($line=~m/^>.*/){
$i++;
$thiscount++;
if ($thiscount >= $n) {
$filenum++;
$thiscount = 0;
}
if ($thiscount == 0) {
close(OUTFILE) if (OUTFILE);
open(OUTFILE, ">>trim_seq_$filenum.seq") || die "File open error!";
}
}
$j++;
print OUTFILE $line;
$filenum = 10 if($filenum > 10);
}
close(INFILE);
close(OUTFILE);
}

&count_line_seq;


#程序运行到现在的时间
$Time_End = sub_format_datetime(localtime(time()));
print "Running from [$Time_Start] to [$Time_End]\n";
print("............................................................\n");

#给出条数
print "total is $i seq. \n $j lines. ";
AllCHN 2002-07-20
  • 打赏
  • 举报
回复
my $filenum = 1;

my $i=0; #count how many seq
my $n=2; #set how many seq in one file .
my $j=0; #count how many lines

#判段输入命令格式
if (-e $ARGV[0]){
open(INFILE ,"$ARGV[0]");
}else{
print " $! Useage : \n perl trim.pl filename!";
exit;
}

#得到当前格式化时间
sub sub_format_datetime
{
local($sec, $min, $hour, $day, $mon, $year) = @_[0..5];
sprintf("%4d-%02d-%02d %02d:%02d:%02d", $year+1900, $mon+1, $day, $hour, $min, $sec);
};

#当前时间
$Time_Start = sub_format_datetime(localtime(time()));
print "Now = $Time_Start\n";
print "\n";

#计算行数和seq 的条数,并按每$n个seq放一个文件
sub count_line_seq{
my $thiscount = 0;
while($line=<INFILE>){
if ($thiscount == 0) {
close(OUTFILE) if (OUTFILE);
open(OUTFILE, ">>trim_seq_$filenum.seq") || die "File open error!";
}
if($line=~m/^>.*/){
$i++;
$thiscount++;
}
$j++;
print OUTFILE $line;
if ($thiscount >= $n) {
$filenum++;
$thiscount = 0;
}
$filenum = 10 if($filenum > 10);
}
close(INFILE);
close(OUTFILE);
}

&count_line_seq;


#程序运行到现在的时间
$Time_End = sub_format_datetime(localtime(time()));
print "Running from [$Time_Start] to [$Time_End]\n";
print("............................................................\n");

#给出条数
print "total is $i seq. \n $j lines. ";
内容概要:本报告基于DNA双螺旋归因模型,通过对奇瑞集团三大主体公司(奇瑞汽车、奇瑞新能源、得壹能源)共超4.5万件专利的深度析,揭示其“整车层→系统层→材料层”三层研发体系的结构性特征与核心矛盾。研究发现,奇瑞在工程应用层面专利布局雄厚,但在底层材料科学和化学领域严重薄弱,导致从整车工程向材料研发延伸时出现“技术断层”。典型案例为得壹能源硅碳负极专利CN120463202A在9个月内被驳回,暴露出“公知工艺拼接、参数微调、缺乏创新机理”的深层次问题,反映出集团在材料领域研发投入不足、人才断层、团队割裂的战略短板。; 适合人群:企业IPR负责人、研发总监/CTO、科技领域投资人及从事新能源汽车技术战略布局的研究人员。; 使用场景及目标:①评估企业专利质量与研发战略匹配度;②识别技术布局中的结构性风险;③指导高价值专利培育与底层技术创新路径规划;④为投资尽调提供技术维度的风险预警。; 阅读建议:本报告强调“专利数据即技术战略镜像”,建议结合IPC类、发明人流动、法律状态等多维数据交叉研判,避免仅凭专利数量误判企业真实创新能力,尤其在固态电池、芯片等前沿领域需重点关注底层专利质量。

37,738

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧