Perl 板


LINE

※ 引述《DRLai (蘇打)》之銘言: : 各位板友好 : 最近需要寫個多重比對的程式 : 想請教比較有效率的寫法 : 比對關鍵字 A B C : 輸入資料(文字檔) : A:a123 A:a456 B:b111 D:d1234 : B:bbb C:ccc : 資料共有上千萬筆,關鍵字假設為3個 : 每行資料長度不見得一樣 : 希望能得到的資料為冒號後面的值 : 以上述範例來說 : 得到的是 : a123 : a456 : b111 : bbb : ccc : 輸出順序沒關係,只要有取得就好 : 之前想到的方法是用 foreach 每個關鍵字去掃 : 但如果關鍵字有10個(m) : 資料有一千萬筆(n) : 那複雜度就是 m * n = 一億 : 另一個方法是把資料變成一筆一筆 : 接著把關鍵字用 join 方式串接 : 不知道有沒有其他更好的方式呢? 我試了這3種寫法... #!/usr/bin/perl local $/; my $data = <STDIN>; for my $key (qw(A B C D E F G H I J)) { while( $data =~ /\b$key:(\S+)/g ) { print "$1\n"; } } #real 0m4.502s #user 0m4.486s #sys 0m0.016s #!/usr/bin/perl local $/; my $data = <STDIN>; while( $data =~ /\b[ABCDEFGHIJ]:(\S+)/g ) { print "$1\n"; } #real 0m2.751s #user 0m2.731s #sys 0m0.020s # 這一種只適用 key 為一個字的.. #!/usr/bin/perl local $/; my $data = <STDIN>; while( $data =~ /\b(?:A|B|C|D|E|F|G|H|I|J):(\S+)/g ) { print "$1\n"; } # real 0m2.993s # user 0m2.978s # sys 0m0.016s 以下是我生成測試資料的程式: #!/usr/bin/perl for(1..1000_0000) { my $key = ('A'..'Z')[rand 26]; my $data = join '', map { ('a'..'z','0'..'9')[rand 36] } 1..4; print "$key:$data\n"; } # 產生測試資料跑比較久, 16 秒左右.. XD --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 112.121.80.249
※ 文章網址: http://webptt.com/m.aspx?n=bbs/Perl/M.1413391367.A.ADD.html
1F:推 skenbo0916: 推實驗! 10/16 02:26
2F:推 DRLai: 感謝!我來試試看 10/18 17:38







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燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP