Re: [問題] regular expression 取出行數的問題
我覺得用點點也不錯
就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
推
05/09 02:23, , 1F
05/09 02:23, 1F
→
05/09 02:23, , 2F
05/09 02:23, 2F
→
05/09 02:24, , 3F
05/09 02:24, 3F
推
05/09 02:39, , 4F
05/09 02:39, 4F
推
05/11 13:44, , 5F
05/11 13:44, 5F
推
05/12 11:11, , 6F
05/12 11:11, 6F
→
05/12 11:12, , 7F
05/12 11:12, 7F
討論串 (同標題文章)
Perl 近期熱門文章
PTT數位生活區 即時熱門文章