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

作者: scwg ( )   2015-05-04 23:28:56
我的作法是這樣
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
: *************************************************
作者: pat12345 (咖啡杯)   2015-05-05 22:22:00
實在太感謝了,原來有這麼好用的預設變數!

Links booklink

Contact Us: admin [ a t ] ucptt.com