作者jjt (A__A)
看板Perl
标题Re: [问题] while跟for的问题
时间Thu Nov 11 20:26:05 2010
※ 引述《sqrt1089 (李崩子)》之铭言:
: 首先我有2个档案分别是a.txt跟b.txt
: a.txt内容
: a 6 10
: b 2 5
: c 3 9
: b.txt内容是:123456789abfewfwegry(就是一串字)
: 以下是我的程式码(for一个输入)
: =========================================================
: #!/usr/bin/perl -w
: open (FH,"a.txt")||die"File open Error!\n";
: chomp(my $input=<>);
: while(<FH>){
: @in=split/\t/;chomp; #a.txt用tab为分隔
: if($input eq $in[0]){
: $x=$in[1]-1;
: $y=$in[2]-1;
: open (TXT2,"b.txt")||die"File open Error!\n";
: while(<TXT2>){
: @strs=split//;
: while($x<=$y){
: $element=$strs[$x];
: $x++;
: push(@out, $element);
: }
: }
: }
: }
: print @out,"\n";
有几个个人小小建议
1.程式里面除非必要,不要包太多层
这样会造成阅读的困难 也就表示你改code要花更多时间
例如
if(e)
{
while(c)
{
if(a==b)
{
}
}
}
如果真的要这样写
我会建议在 } 後面补上 以下这种注解
}#End if(a==b)
ps:这是范例仅供参考
程式里面的范例,刚好就是这个case
:while(<FH>){
: @in=split/\t/;chomp; #a.txt用tab为分隔
: if($input eq $in[0]){
: .....
以上只有单个if没有else
可以改成
while(<FH>){
@in=split/\t/;chomp; #a.txt用tab为分隔
#当输入不等於a.txt的第一栏元素时 跳过不处理
next if($input ne $in[0]);
#处理
..
2.不要作重复开档的动作
因为程式码里面没有对b.txt作边读边写的演算
没必要每次处理都开一次b.txt
并且一个open 就要配上一个close (除非有特别处理)
3.
: @strs=split//;
: while($x<=$y){
: $element=$strs[$x];
: $x++;
: push(@out, $element);
: }
6行程式 其实用substr()一个函式就解决了XD
substr($string, $start, $length);
以上是小小建议:)
如果只是只run一次就不会在用的code 那就当我以上没说
用过一次就丢的 怎样写都可以 只要正确就好XD
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.32.245.106
1F:推 sqrt1089:恩感谢。我把substr改过去了,只是他的写法应该是 11/11 21:51
2F:→ sqrt1089:substr($string, $start, $length);其中$length=大-小 11/11 21:52
3F:→ sqrt1089:因为我测substr($string,3,5);是从第4个值开始读5个。板 11/11 21:53
4F:→ sqrt1089:上的高手真多,让我受益良多!!!再一次感谢!! 11/11 21:53
5F:→ rkcity:是取多长没错呀 11/11 22:02
6F:→ sqrt1089:那我被end会错意了,我以为是尾巴,囧! 11/11 22:11
修文章 把$end 改 $length
※ 编辑: jjt 来自: 114.32.245.106 (11/11 22:41)