永发信息网

perl查找

答案:2  悬赏:80  手机版
解决时间 2021-04-06 08:38
perl查找
最佳答案
open SRC, "file.xml";
my $lastNode = ; # 这里假设了你第一行就是

while (my $line= ) {
if ( $line =~ /Value=\"([^\"]+)[\"]/ ) {
print "$lastNode\t$line" if $1 > 85
}
elsif ( $line=~ /^ $lastNode = $line;
}
}
close SRC;追问感谢大家的热心回答, 这个没有报错,不过也不显示任何内容。
追加:这段文件内容在文件中间,有很多段,这个只是一部分,有的可能有5行,6行,并不只是4行(A,B,C,D),也不会第一行就出现。追答open SRC, "file.xml" or die $!;
my $lastNode;
while ( ) {
if ( /^ $lastNode = $_;
last;
}
}
die "Can't find any Node start. Please check!" unless $lastNode;
while (my $line= ) {
if ( $line =~ /Value=\"([^\"]+)[\"]/ ) {
print "$lastNode\t$line" if $1 > 85
}
elsif ( $line=~ /^ $lastNode = $line;
}
}
close SRC;追问你好,热心的帮助者,运行你的程序有个error:
Can't find any Node start. Please check! at yy.pl line 11, line 738.
(我的数据文件只有738行。)我在相同的文件夹下建立了file.xml 运行的,对于原始发问的内容,还有一点要说明一下:如果没有Value>85 的数据,也就不显示上面得根节点,
)只有在根节点之间满足 Value>85 ,才显示本行以及上面的根节点,希望援手.追答我写的这个已经实测, 乎合你的要求, 但我估计你的文档并不是
将这句 : elsif ( $line=~ /^改写成: elsif ( $line=~ /
全部回答
代码来啦~

#!perl -w
#
my $limit = 85;
my $sourcefile = 'C:\Users\Administrator\Desktop\test.txt'; #源文件
my $targetfile = 'C:\Users\Administrator\Desktop\reslut.txt'; #结果

open(SOURCEHANDLE, $sourcefile);open(TARGETHANDLE, ">".$targetfile);
while ()
{
my $string = $_;
if($string =~ m/(?(?<=Value=")\d+)/)
{
if($+{tag} >= $limit)
{
print TARGETHANDLE $string;
}
}
else
{
print TARGETHANDLE $string;
}
}

close(SOURCEHANDLE);
close(TARGETHANDLE);
print "over", "\n";

看看是否可以. 希望对你有帮助!追问1.这个是输出目标行吗? 能输出它所在上面的根节点吗?
2.我准备好了环境,运行有点问题error:
Sequence (? ag>(?<=Value=")\d+)/
3.我现在找到一种方法能把目标行准确输出,也能找到它所在的行数,但是不能找到它上面的根节点.追答你用的perl版本多少?
估计是perl的版本问题。我用的V5.10.0

我这里边试了。可以很好的找出你要的结果。追问v5.8.0追答下个V5.10.0试下吧追问你好,由于周末没有环境,所有也没有时间来看,这个v5.8.0是别人提供的,我不能随便改,所以不好弄,你能再看看嘛,还有
if($string =~ m/(?(?<=Value=")\d+)/)
这个代码,由于版本的问题,我接触的不多,所以也不太明白一些符号的意思,比如 ~ 、?、等等,能再解释一下吗?追答5.8.8上跑过的代码。?()是指把匹配到的内容放到$+{tag}中,5.8.8好像不支持这个语法

my $limit = 85;
my $sourcefile = 'C:\Users\Administrator\Desktop\test.xml';
my $targetfile = 'C:\Users\Administrator\Desktop\reslut.xml';
open(SOURCEHANDLE, $sourcefile)||die"打开文件错误$!\n";;
open(TARGETHANDLE, ">".$targetfile);
while ()
{
my $string = $_;
if($string =~ m/((?<=Value=")\d+)/)
{
#print $1;
if($1 >= $limit)
{
print TARGETHANDLE $string;
}
}
else
{
print TARGETHANDLE $string;
}
}
close(SOURCEHANDLE);
close(TARGETHANDLE);
print "over", "\n";
有情况没????
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
7月份找工作 缺经验
高三班级激励标语,高三励志口号,要霸气的
如何清除白色鞋帮上的棕色鞋油!!!
602.88除以452.16保留整数
做梦梦见地上突然间起火,火越烧越大,,请问
单选题Hardly________theplanewhenIwaswar
PanAm games 什么意思
应急配电箱内HP-D-2KVA-J是什么意思
9平方卧室怎么装修谁知道
马不停蹄的忧伤阅读答案
长征口号,征集长征精神的宣传标语
大家在干什么,我在插苗苗
我是新上任的鞋厂主管第一天开会该说些什么
机械键盘什么意思,机械键盘6键自定义宏和全键
电子科技大学副教授唐红艳的女儿叫什么名字?
推荐资讯
赛尔号技能刻印怎么得
当狗熊来到大象家里,他们会发生什么事呢?请
单选题有人走在冰面上,发现冰面出现裂纹,他
周一至周五任意一天的单词
关于剪纸的古诗词,关于剪纸的诗句
单选题蒋介石在“庐山谈话”中说:“跟着今年
情怀怎么造句
我的双休日 作文怎么写
前端试调是什么意思,如何训练自己调试前端页
描写天黑了的句子,天黑了该回家了心里描写的
有时候很想做一件事,却不敢去做,总会觉得在
如图所示的实例中,不属于连通器应用的是A.??
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?