Re: [問題] while跟for的問題
※ 引述《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
推
11/11 21:51, , 1F
11/11 21:51, 1F
→
11/11 21:52, , 2F
11/11 21:52, 2F
→
11/11 21:53, , 3F
11/11 21:53, 3F
→
11/11 21:53, , 4F
11/11 21:53, 4F
→
11/11 22:02, , 5F
11/11 22:02, 5F
→
11/11 22:11, , 6F
11/11 22:11, 6F
修文章 把$end 改 $length
※ 編輯: jjt 來自: 114.32.245.106 (11/11 22:41)
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
1
16
Perl 近期熱門文章
PTT數位生活區 即時熱門文章