Perl 板


LINE

弄了一個晚上終於寫出有點像的東西了 QQ" 感謝 想請教一下我現在是想把所有檔案的各行行尾空白去除. 想法是一次讀檔,讀檔之後處理各行,處理完成後一次寫入暫存檔。 暫存檔再覆蓋原來的檔案,但是會不會因I/O太多造成太慢? 不知道有比較快的辦法嗎?-> 我之後有可能會套用在類似 Linux kernel 那樣的大目錄裡 我寫出來看起來也蠻龐大,有興趣的前輩可以順便幫忙指點一下嗎?謝謝 #!/usr/bin/perl # Usage: [-R][*][file name] use warnings ; use strict ; use 5.010 ; use File::Copy ; use File::Find ; use Cwd; my @files; file_list(\@ARGV); foreach(@files){ right_trim($_, 1); } printf "Done, %d files\n", scalar @files; unlink("tmp"); exit; #-------------------------------- # get file list from @ARGV #-------------------------------- sub file_list{ my $arg = shift; while(@$arg){ #file test & file name print $_ = shift @$arg; if(/\*/){ # all @files = glob("*.cpp *.c *.h *.txt *.pl") } elsif(/-[rR]/){ # recursive find(\&file_found, Cwd::cwd()); } else{ # specific file name push @files, $_; } } } sub right_trim{ my $file = $_ =shift; my $show = shift; # error handling return if(/tmp/); # read all readable files # write it to a tmp file say $file if $show; open(FH, '<', $file) or die $!; open(TMP, '>', "tmp") or die $!; my @before = <FH>; my @after ; foreach (@before){ s/\s+$//; $_ .= "\n" ; push @after, $_; } print TMP @after; close FH; close TMP; copy("tmp", $file) || die "copy: $!"; } sub file_found { $_ = $File::Find::name; return unless -e && -f && -r && -w ; push @files, $_ if /\.pl$/||/\.c$/||/\.h$/||/\.txt$/; } ※ 引述《zard1989 (St. Kevin)》之銘言: : ※ 引述《a3181388 (Mr.3181388)》之銘言: : : 大家好 弱者小弟我想請教一下 : : 要怎麼讓命令引數支援 -R 和 * : : 目前已經可以讓許多檔案當作引數 : : 如 try.pl 1.txt 2.txt : : 想讓程式支援資料夾下所有子資料下遞迴的所有檔案 : : 不知該怎麼做 謝謝 : 可以使用File::Find模組(http://perldoc.perl.org/File/Find.html): 至於 * 的部份,你的shell(e.g. bash)會幫你展開成該目錄底下的所有檔案名稱。 : Example: : #!/usr/bin/env perl : use 5.010; : use strict; : use File::Find; : my @files; : sub wanted { : # 在這個function過濾和處理你要的檔案 : # -f 等同於 -f $_ ,測試該檔名是否為一個檔案,而非目錄或其他東西 : -f && push @files, $_; : } : # find預設會遞迴搜尋資料夾下的檔案 (preorder traversal) : find(\&wanted, @ARGV); : # 印出@ARGV中所有檔案、目錄底下的檔案的檔名 : say join " ", @files; ※ 引述《zard1989 (St. Kevin)》之銘言: : ※ 引述《a3181388 (Mr.3181388)》之銘言: : : 大家好 弱者小弟我想請教一下 : : 要怎麼讓命令引數支援 -R 和 * : : 目前已經可以讓許多檔案當作引數 : : 如 try.pl 1.txt 2.txt : : 想讓程式支援資料夾下所有子資料下遞迴的所有檔案 : : 不知該怎麼做 謝謝 : 可以使用File::Find模組(http://perldoc.perl.org/File/Find.html): 至於 * 的部份,你的shell(e.g. bash)會幫你展開成該目錄底下的所有檔案名稱。 : Example: : #!/usr/bin/env perl : use 5.010; : use strict; : use File::Find; : my @files; : sub wanted { : # 在這個function過濾和處理你要的檔案 : # -f 等同於 -f $_ ,測試該檔名是否為一個檔案,而非目錄或其他東西 : -f && push @files, $_; : } : # find預設會遞迴搜尋資料夾下的檔案 (preorder traversal) : find(\&wanted, @ARGV); : # 印出@ARGV中所有檔案、目錄底下的檔案的檔名 : say join " ", @files; --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.229.226.68







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

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

TOP