Perl 板


LINE

首先我有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"; 結果為:我輸入a,他先把 6跟10記錄起來,然後去記事本b找第6個~第10格元素,印出來 C:\>perl 99.p a 6789a C:\>perl 99.p b 2345 C:\>perl 99.p c 3456789 ======================以上為單輸入========================================= 現在我不要輸入了, 我就直接設一陣列內容為abc(就是我把我的輸入預設,且為多個) 以下是程式碼: #!/usr/bin/perl -w open (FH,"ttt.txt")||die"File open Error!\n"; @array=("a","b","c"); foreach $index(0..$#array){ while(<FH>){ @in=split/\t/;chomp; if( $array[$index] eq $in[0]){ # push(@output,"$in[1],$in[2]"); $x=$in[1]-1; $y=$in[2]-1; open (TXT2,"test2.txt")||die"File open Error!\n"; while(<TXT2>){ @strs=split//; while($x<=$y){ $element=$strs[$x]; $x++; push(@out, $element); } } } } print @out,"\n"; } 其結果為 C:\>perl 99.p 6789a 6789a 6789a 只存到當輸入=a的,要怎麼修飾,才會跟上面一樣結果? 道理應該是for a做一次,for b再做一次,for c再做一次,怎麼只做a而已? 有點冗長,在這先說聲謝謝。 補充 我在for迴圈加了print 看看是不是a,b,c都有做結果是有的 foreach $index(0..$#array){ print $array[$index],"\n"; while(<FH>){ .. .. .... 結果為 C:\>perl 99.p a 6789a b 6789a c 6789a 囧!~ ▂▂ ▂▂▂ ▂▄▅▅▄▆█ _█◣ ◢ (●) ◣/\\ 丫 │◥  ̄◤ --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.215.116 ※ 編輯: sqrt1089 來自: 140.116.215.116 (11/11 15:27)
1F:→ sqrt1089:另外,我把@array=("a","b","c");變成@array=("b"); 11/11 15:35
2F:→ sqrt1089:印出是2345。 11/11 15:36
※ 編輯: sqrt1089 來自: 140.116.215.116 (11/11 15:41)
3F:推 rkcity:<FH> 讀完一次就沒了, 不會重複讀取 11/11 17:51
4F:→ rkcity:所以你foreach跑第二次時 while-loop根本沒跑 11/11 17:52
5F:→ rkcity:可以先@FH = <FH> 然後針對@FH while-loop 11/11 17:52
6F:→ sqrt1089:不懂意思XD,我的方法是把開檔丟到foreach裡面去,就是每 11/11 18:25
7F:→ sqrt1089:for一次就開檔一次,已經快接近我要的了,只是他會記憶之 11/11 18:25
8F:→ sqrt1089:前輸入的值, 11/11 18:25
foreach $index(0..$#array){ #@FH=<FH>; open (FH,"ttt.txt")||die"File open Error!\n"; while(<FH>){ .. . 輸入結果為: C:\>perl 99.p a 6789a b 6789a2345 c 6789a23453456789 正在尋找,不要記憶前面輸入的相關文章。 ※ 編輯: sqrt1089 來自: 140.116.215.116 (11/11 18:28)
9F:→ rkcity:我那樣講怪怪的, 應該是說<FH>讀完之後指標位置是在檔案最 11/11 18:40
10F:→ rkcity:後面, 所以你繼續getline的結果都是空的 11/11 18:41
11F:→ rkcity:所以你把open FH丟進foreach, 等於是每次loop都會做開檔, 11/11 18:44
12F:→ rkcity:賦予fileheadle的動作. 當然指標位置就在檔案最前面 11/11 18:44
13F:→ rkcity:getline就會有資料。 如果不想每次都開檔, 就先把<FH>讀進 11/11 18:45
14F:→ rkcity:@array, 或是使用seek()做指標的移動 11/11 18:46
15F:→ rkcity:filehandle 打錯- - 在想什麼ˊˋ 11/11 18:52
16F:→ sqrt1089:莫名其妙的解決了,很多靈感來自於幫忙人的提示。感恩! 11/11 23:19







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP