Perl 板


LINE

※ 引述《Rnsras (Rnsras)》之铭言: : ※ 引述《loyuchu1539 (爆走原始人)》之铭言: : : 小弟是Perl 新手 由於工作需要,才开始学习perl 目前预到两个问题 : : 1.撷取文字党片段到一阵列 : : Ex: 文字档(map.txt)如下 : : Jack : : AA_map 1 : : BB_map 1 : : CC_map 0 : : Michael : : AA_map 0 : : CC_map 0 : : DD_map 1 : : Ruby : : DD_map 1 : : EE_map 0 : : . : : . : : 请问小弟该如何文字档中的Michael至Ruby中间的三行取出,存至@map 呢? : 蛮常处理这种状况,抛砖引玉一下,希望有更好的做法可以学 XD : 我的方法其实蛮直觉的,前提是格式内容要够规律,不然就不适用了; : 方法就是设一个变数去控制是否开始储存txt的内容,然後如果符合要储存的条件, : EX: Michael和Ruby中间,就把刚才存的 @temp 丢进去 @map 里面,以下为程式码: : my $sw = 0; my @map=(); my @temp=(); : open inputF, "map.txt"; : while(<inputF>){ : chomp; : if($sw==0 && $_ eq "Michael"){ : $sw=1; @temp=(); : }elsif($sw==1 && $_ !~ /^\w+_\w+\s+\d+$/){ : $sw=0; if($_ eq "Ruby"){ push @map, @temp;} : }elsif($sw==1){ : push @temp, $_; : } : } : close inputF; 我顺便来复习一下 scalar context 的 range operator 的用法.. 如果每次执行这程式的时候, 这一段程式只会给一个档案使用的话, while 的 body 里面的判断可以这样子写 if( $_ eq "Michael" ... $_ eq "Ruby" ){ push @map, $_; } 或是用 regex 写成 if( /Michael/ ... /Ruby/ ) { push @map, $_; } 这样 @map 里面会有 Michael, 中间三行, Ruby, 这样一共五行.. 回圈结束後再把 @map 的头尾去掉即可, 然後 $_ eq "Michael" ... $_ eq "Ruby" 这个东东为 true 的这几次依此会 return 1 2 3 4 5E0 如果拿一个变数把它存下来, 判断一下必须 它 > 1 而且 substr(它, -2) ne 'E0' 也可以 : : 2.存一个庞大的文字档案分类至一个hash : : 以上头的文字档为范例 : : 小弟该如何将这个文字档 以各别名字存为一个hash呢? : : 例如存成: : : $hash{Jack} = : : AA_map 1 : : BB_map 1 : : CC_map 0 : : 另外一问..若从hash内叫出来 想要判断内容,请问各位会如何撰写呢? : : 比如说 判断$hash{Jack} 内 AA_map 值是否为1 是则print出 AA_map, : : 若不是,则继续判断BB_Map 是否为1,印出 BB_map 直到判断到某个XX_map 为1为止.. : : 写得有点智障...但希望看得懂得大大能指教一下@@... : 综合你要储存跟判断,我的做法的话用 reference 的方式把值(AA_map 1)存成 hash, : 再把它塞进外围的 %hash,这样如果你要知道 Jack 的 AA_map 是 0 还是 1, : 你可以用 $hash{'Jack'}{'AA_map'} 得到 1,以下为 code (其实只有小改上面的 code) : my %hash=(); my $name=''; : open inputF, "map.txt"; : while(<inputF>){ : chomp; : if($_ =~ /^(\w+_\w+)\s+(\d+)$/){ : my %temp = defined($hash{$name})? %{$hash{$name}}:(); : $temp{$1} = $2; : $hash{$name} = \%temp; : }else{ : $name = $_; : } : } : close inputF; : 希望有帮助到原PO ^_^ --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 112.121.78.5
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Perl/M.1460705270.A.1A2.html ※ 编辑: CindyLinz (112.121.78.5), 04/15/2016 15:28:47
1F:→ CindyLinz: 说明可以看这篇 #1IRX5P3B (Perl) 04/15 15:39
2F:→ CindyLinz: 不过我那时 .. 和 ... 好像有讲反, 请自己试一下 ._. 04/15 15:39
3F:推 Rnsras: 哦哦哦,原来还有这种用法!受教惹!! 04/15 22:40
4F:推 herculus6502: 赞一个 04/28 22:58







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP