作者AntaresStar ()
看板Perl
标题Re: [问题] regular expression 取出行数的问题
时间Sat May 9 01:20:06 2015
我觉得用点点也不错
就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://webptt.com/cn.aspx?n=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
1F:推 flu: perl的奇异点和idiom的使用对不熟的人有时真的满困扰的 05/09 02:23
2F:→ flu: 像一样呼叫sub: &mysub vs mysub 两种传入的引数就不同 05/09 02:23
3F:→ flu: 所以在teamwork的时候 先要求某种共识以达成一致性也是必要的 05/09 02:24
4F:推 CindyLinz: perl 的 push, 後面那个 list 没有省略写法呀~ o.o 05/09 02:39
5F:推 abliou: 原来没有省略写法,我也以为可以省略。有没有perl省略大全 05/11 13:44
6F:推 Neisseria: Perl Best Practice 里有讨论过 Perl 省略变数的问题 05/12 11:11
7F:→ Neisseria: 作者是觉得 Perl 的省略并不统一,所以不建议省略 05/12 11:12