Perl 板


LINE

首先我有2个档案分别是a.txt跟b.txt a.txt内容 a 6 10 b 2 5 c 3 9 b.txt内容是:123456789abfewfwegry(就是一串字) 以下是我的程式码(for一个输入) ========================================================= #!/usr/bin/perl -w open (FH,"a.txt")||die"File open Error!\n"; chomp(my $input=<>); while(<FH>){ @in=split/\t/;chomp; #a.txt用tab为分隔 if($input eq $in[0]){ $x=$in[1]-1; $y=$in[2]-1; open (TXT2,"b.txt")||die"File open Error!\n"; while(<TXT2>){ @strs=split//; while($x<=$y){ $element=$strs[$x]; $x++; push(@out, $element); } } } } print @out,"\n"; 结果为:我输入a,他先把 6跟10记录起来,然後去记事本b找第6个~第10格元素,印出来 C:\>perl 99.p a 6789a C:\>perl 99.p b 2345 C:\>perl 99.p c 3456789 ======================以上为单输入========================================= 现在我不要输入了, 我就直接设一阵列内容为abc(就是我把我的输入预设,且为多个) 以下是程式码: #!/usr/bin/perl -w open (FH,"ttt.txt")||die"File open Error!\n"; @array=("a","b","c"); foreach $index(0..$#array){ while(<FH>){ @in=split/\t/;chomp; if( $array[$index] eq $in[0]){ # push(@output,"$in[1],$in[2]"); $x=$in[1]-1; $y=$in[2]-1; open (TXT2,"test2.txt")||die"File open Error!\n"; while(<TXT2>){ @strs=split//; while($x<=$y){ $element=$strs[$x]; $x++; push(@out, $element); } } } } print @out,"\n"; } 其结果为 C:\>perl 99.p 6789a 6789a 6789a 只存到当输入=a的,要怎麽修饰,才会跟上面一样结果? 道理应该是for a做一次,for b再做一次,for c再做一次,怎麽只做a而已? 有点冗长,在这先说声谢谢。 补充 我在for回圈加了print 看看是不是a,b,c都有做结果是有的 foreach $index(0..$#array){ print $array[$index],"\n"; while(<FH>){ .. .. .... 结果为 C:\>perl 99.p a 6789a b 6789a c 6789a 囧!~ ▂▂ ▂▂▂ ▂▄▅▅▄▆█ _█◣ ◢ (●) ◣/\\ 丫 │◥  ̄◤ --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.215.116 ※ 编辑: sqrt1089 来自: 140.116.215.116 (11/11 15:27)
1F:→ sqrt1089:另外,我把@array=("a","b","c");变成@array=("b"); 11/11 15:35
2F:→ sqrt1089:印出是2345。 11/11 15:36
※ 编辑: sqrt1089 来自: 140.116.215.116 (11/11 15:41)
3F:推 rkcity:<FH> 读完一次就没了, 不会重复读取 11/11 17:51
4F:→ rkcity:所以你foreach跑第二次时 while-loop根本没跑 11/11 17:52
5F:→ rkcity:可以先@FH = <FH> 然後针对@FH while-loop 11/11 17:52
6F:→ sqrt1089:不懂意思XD,我的方法是把开档丢到foreach里面去,就是每 11/11 18:25
7F:→ sqrt1089:for一次就开档一次,已经快接近我要的了,只是他会记忆之 11/11 18:25
8F:→ sqrt1089:前输入的值, 11/11 18:25
foreach $index(0..$#array){ #@FH=<FH>; open (FH,"ttt.txt")||die"File open Error!\n"; while(<FH>){ .. . 输入结果为: C:\>perl 99.p a 6789a b 6789a2345 c 6789a23453456789 正在寻找,不要记忆前面输入的相关文章。 ※ 编辑: sqrt1089 来自: 140.116.215.116 (11/11 18:28)
9F:→ rkcity:我那样讲怪怪的, 应该是说<FH>读完之後指标位置是在档案最 11/11 18:40
10F:→ rkcity:後面, 所以你继续getline的结果都是空的 11/11 18:41
11F:→ rkcity:所以你把open FH丢进foreach, 等於是每次loop都会做开档, 11/11 18:44
12F:→ rkcity:赋予fileheadle的动作. 当然指标位置就在档案最前面 11/11 18:44
13F:→ rkcity:getline就会有资料。 如果不想每次都开档, 就先把<FH>读进 11/11 18:45
14F:→ rkcity:@array, 或是使用seek()做指标的移动 11/11 18:46
15F:→ rkcity:filehandle 打错- - 在想什麽ˊˋ 11/11 18:52
16F:→ sqrt1089:莫名其妙的解决了,很多灵感来自於帮忙人的提示。感恩! 11/11 23:19







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灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP