Re: [問題] regular expression 取出行數的問題

看板Perl作者 ( )時間9年前 (2015/05/04 23:28), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/4 (看更多)
我的作法是這樣 chomp (my $name = <>); my @record; open F, 'text'; { local $/ = ''; while (<F>) { @record = split /\n/ if /^$name score/; } } close F; $" = '|'; print "@record\n"; 重點是 local $/ = ''; $/ 是 perl 特殊變數, 表示用 <...> 讀檔/輸入時, 讀到什麼為止; 預設為 "\n" 表示一次讀一行. $/ 有兩個特例值: undef 和 ''. $/ = undef 表示把讀到檔尾 (slurp mode). $/ = '' 表示一次讀一『段』 (paragraph mode). 段與段之間以空行分開. 因為你的資料符合 paragraph mode 的格式, 所以適合把 $/ 設成 '', 一次讀一筆進來檢查最開始 ( /^.../ ) 是不是 /$name score/. 如果找到了再用 split 把各行切開. ※ 引述《pat12345 (咖啡杯)》之銘言: : 各位perl版的朋友大家晚安, : 有一個regular expression的問題想要請教大家, : 看似很簡單,想要寫出來卻摸不著頭緒, : 想要問問大家有沒有什麼想法, : 下列是個純文字檔, : 我想要給個輸入的參數Nelson, : 然後萃取一個陣列, : 陣列0~4 分別為最後面的五行。 : 這有辦法做到嗎@@? : *****************txt***************************** : Jack score : 100 : 80 : 90 : end Jack : Peter score : 90 : 88 : 75 : end Peter : Nelson score : 33 : 55 : 78 : end Nelson : ************************************************* -- -----BEGIN GEEK CODE BLOCK----- Version: 3.12 GCS/M d-(+) s: a C++$ UL++B+ P++(++++) L+ E--@ W++ N? o? K? w(++) !O M+ !V PS++(+++) PE++(+++) Y? PGP t+++ !5 !X R !tv b++>+++ DI++ D+ G e+++>++++ h-* r% y+ ------END GEEK CODE BLOCK------ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 128.36.232.22 ※ 文章網址: https://www.ptt.cc/bbs/Perl/M.1430753338.A.C5E.html

05/05 22:22, , 1F
實在太感謝了,原來有這麼好用的預設變數!
05/05 22:22, 1F
文章代碼(AID): #1LHv0wnU (Perl)
討論串 (同標題文章)
文章代碼(AID): #1LHv0wnU (Perl)