Re: [問題] while跟for的問題

看板Perl作者 (A__A)時間14年前 (2010/11/11 20:26), 編輯推噓1(105)
留言6則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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
恩感謝。我把substr改過去了,只是他的寫法應該是
11/11 21:51, 1F

11/11 21:52, , 2F
substr($string, $start, $length);其中$length=大-小
11/11 21:52, 2F

11/11 21:53, , 3F
因為我測substr($string,3,5);是從第4個值開始讀5個。板
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
那我被end會錯意了,我以為是尾巴,囧!
11/11 22:11, 6F
修文章 把$end 改 $length ※ 編輯: jjt 來自: 114.32.245.106 (11/11 22:41)
文章代碼(AID): #1Cs-3VlF (Perl)
討論串 (同標題文章)
文章代碼(AID): #1Cs-3VlF (Perl)