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