2013-06-03 19 views
0

我在这个程序中有一系列单行程序。他们将单独在cmd中工作,或者单独工作。但是,当他们在一起时,我相信这只是第一个可行的方案。考虑到我有大量的数据需要处理,而且更愿意在批处理中执行此操作以及其他操作,所以这非常麻烦。我对perl和计算机编程相当陌生,所以我为初学者的错误道歉。任何帮助都会很棒。代码只能在cmd中使用,而不能在程序中使用

谢谢, 乔希

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

顺便说一下......这个编的实际单词不是标量变量.. – joshE

+4

[perldoc perldebug](http://perldoc.perl.org/perldebug.html)。逐步循环,在更改前后检查'$ _'。另外,请考虑'tr/|/\ n /','tr/\ n // d'等,以及更改正则表达式分隔符而不是反斜杠('\')您的斜杠('/')。 –

+0

正如你在文件中对换行符所做的那么多操作,你可能会有更好的运气在一行中读取整个文件。在'while'循环之前放置'$/= undef;'。还可以在你的第四个替代品上使用'/ m'修饰符(带有'...^Units |^Current Price ...'的那个')。 – mob

回答

1

您的某些单行的(#1,#7和#11),其插入线。一些单线(#6和#10)合并线。这会影响随后的一线客户将其视为一行输入。

在您的新计划中,这意味着一些替代品看到的是他们的单行同行者的两倍,或者只是一部分。

您可以通过添加local $/;立即读入整个文件来解决此问题。

这就是说,我质疑你的单人工作的声明。例如,第三种模式在每行的开始处放置一个|,那么^Units在第四种模式中的匹配程度如何?

+0

@ikegami ...你其实是对的那一个和秩序......这是我后来通过观察发现的东西......总是这些小东西,无论如何,它仍然有一些问题,所以如果你有任何解决方案为什么其他方式可能无法正常工作?我将非常感谢 – joshE

+0

正如我之前所要求的,请指出您遇到的问题(通过提供产生问题的输入,以及您收到的输出和预期的输出)。 – ikegami

相关问题