2013-06-03 57 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

相關問題