看板 Perl 關於我們 聯絡資訊
我覺得用點點也不錯 就split那行不同而已 chomp (my $name = <>); my @record; open F, 'text'; while (<F>) { chomp, push @record, $_ if /^$name score$/../^end $name$/; } close F; 不過題外話 如果push那邊省略$_就會爛掉 真是猜不透perl啊 ※ 引述《scwg ( )》之銘言: : 我的作法是這樣 : 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 : : ************************************************* -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.230.241.195 ※ 文章網址: https://www.ptt.cc/bbs/Perl/M.1431105608.A.BB2.html ※ 編輯: AntaresStar (36.230.241.195), 05/09/2015 01:21:36 ※ 編輯: AntaresStar (36.230.241.195), 05/09/2015 01:27:50 ※ 編輯: AntaresStar (36.230.241.195), 05/09/2015 01:28:21
flu: perl的奇異點和idiom的使用對不熟的人有時真的滿困擾的 05/09 02:23
flu: 像一樣呼叫sub: &mysub vs mysub 兩種傳入的引數就不同 05/09 02:23
flu: 所以在teamwork的時候 先要求某種共識以達成一致性也是必要的 05/09 02:24
CindyLinz: perl 的 push, 後面那個 list 沒有省略寫法呀~ o.o 05/09 02:39
abliou: 原來沒有省略寫法,我也以為可以省略。有沒有perl省略大全 05/11 13:44
Neisseria: Perl Best Practice 裡有討論過 Perl 省略變數的問題 05/12 11:11
Neisseria: 作者是覺得 Perl 的省略並不統一,所以不建議省略 05/12 11:12