![](/img/trans.png)
[英]Using Perl, how do I check if a process with given name is running or not?
[英]how do i identify and check text using perl?
我有像这样的xml数据
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE article PUBLIC "-//ES//DTD journal article DTD version 5.2.0//EN//XML" "art520.dtd" [<!ENTITY mmc1 SYSTEM "mmc1" NDATA APPLICATION><!ENTITY mmc2 SYSTEM "mmc2" NDATA APPLICATION>]><article docsubtype="fla"> <item-info><jid>JURO</jid><aid>10407</aid><ce:pii>S0022-5347(13)04374-7</item-info><ce:inter-ref xlink:href="http://download.journals.elsevierhealth.com/mmcs/journals/0022-5347/PIIS0022534713059089.mmc2.pdf" id="intref0010"><ce:bold>Abstract</ce:bold></ce:inter-ref><ce:inter-ref xlink:href="http://download.journals.elsevierhealth.com/mmcs/journals/0022-5347/PIIS0022534713059089.mmc1.pdf" id="intref0010"> <ce:bold>Abstract</ce:bold></ce:inter-ref>
给出了抽象文本的链接,这个链接由EITIY声明“MMC \\ d”和数据生成
<pii>..</pii>
nw我通过收集这个代码的两个数据来检查给定的链接是否正确,这些数据是eitiy声明“MMC1”..和数据
<pii></pii>
在我的代码中我收集这些数据。 在这段代码中,首先是mmc1和S0022-5347(13)04374-7,我在pii变量中删除' - ''('')'并将mmc1添加到其中。 在我做这样的“PIIS0022534713059089.mmc1”并检查。
问题是什么
abtract文本在文件中出现两次,因此第一个摘要应包含“PIIS0022534713059089.mmc1”,第二个摘要应包含“PIIS0022534713059089.mmc2”,但如果错误地给出第一个抽象文本“PIIS0022534713059089.mmc2”和第二个抽象文本“PIIS0022534713059089.mmc1”我们识别并告诉用户。
我的代码是
#!/usr/bin/perl
print "start..";
@files = <*.xml>;
open my $out, '>', 'output.xml' or die $!;
foreach $file (@files) {
open (FILE, "$file");
while (my $line = <FILE>) {
if ($line =~ /(<ce:pii>)(.*)(<\/ce:pii>)/) {
$pii = $2;
$pii =~ s/\-//g;
$pii =~ s/\(//;
$pii =~ s/\)//;
}
if ($line =~ /\"(mmc)([1-5]{1})\"/) {
my $count = $1 . $2;
}
if ($line =~ /$pii\.$count/) {
print ".";
}
else {
print $out("$file = wrong\n");
}
}
}
听起来你在问如何确保每个摘要按升序显示 - 从.mmc1
开始,然后是.mmc2
,然后是.mmc3
,依此类推。 我还要猜测该文件可能包含许多不同的摘要,因此ABSTRACT1.mmc3
可能后跟ABSTRACT2.mmc1
并且不应该发出错误信号。 对?
您可以使用哈希来跟踪特定摘要的最新mmc
数。 然后,当您看到该抽象的新mmc
,您可以根据之前看到的那个进行检查。 像这样:
open (FILE, "$file");
my %last_mmc;
while (my $line = <FILE>) {
...
if ($line =~ /"mmc([1-5])"/) {
# Check that the mmc number is correct.
$last_mmc{$pii} ||= 0;
warn "incorrect mmc: $pii.$line" if ($2 != $last_mmc{$pii} + 1);
$last_mmc{$pii} = $2;
my $count = "mmc$2";
}
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.