我在这个程序中有一系列的单行程序。他们将在cmd或indiv中单独工作。然而,当他们在一起时,我认为它只是第一个有效的。考虑到我有很多数据可以使用,而且很可能能够批量执行此操作和其他类似的操作,这非常麻烦。我是perl和计算机编程的新手,所以我为初学者错误道歉。任何帮助都会很棒。
谢谢, 约什
use strict;
use warnings;
LINE: while (<>) {
s/POSF /\n/gi;
s/,|\*|\\|\^|\"|=|\?|\$//gi;
s/^/\|/gi;
s/(\|)(number: .*?$|From \d+\/\d+\/\d+ to \d+\/\d+\/\d+|^Units|^Current Face|^Price|^FX|As of \d+\/\d+\/\d+)/$2/gi;
s/\| +|\|\t+/\|/gi;
s/\n/\t/gi;
s/\|/\n/gi;
s/^/\|/gi;
s/(\|)(.*?number: .*?$)/$2/gi;
s/\n//gi;
s/\|/\n/gi;
print;
}
print "\n\ndone"
答案 0 :(得分:1)
你的一些单行(#1,#7和#11)插入了行。你的一些单线(#6和#10)组合线。这会影响后续的单行作为一行输入的内容。
在你的新节目中,这意味着一些替换看到的是他们的单行对应物的两倍,或者只是一部分。
您可以通过添加local $/;
一次读取整个文件来解决此问题。
那就是说,我挑战你的单线工作的说法。例如,第3个模式将|
放在每一行的开头,那么^Units
如何在第四个模式中匹配?