2012-01-04 88 views
-2

我對Perl很陌生,我試圖排查他們在其網站上上傳的某些腳本的腳本。該腳本將打開一個文本文件(存儲在.dat中)並刪除CRLF以正確格式化該文件,以便將其批量導入到SQL數據庫中。我正在使用SQLite3,它不適合數據中的工件。需要幫助編輯文本文件中的CRFL文件

該腳本位於:http://www.n6lhv.net/uls/preprocess-FixEmbeddedCRLFs-pl.txt並基於chomp()函數。命令行的用法是perl.exe preprocess-FixEmbeddedCRLFs textfilename,它會輸出一個名爲textfilename-new的新文件

我處理的數據是數十萬行,但是我上傳了一個包含我遇到問題的地方,在這裏找到它:http://www.megaupload.com/?d=O8AL1E50。該腳本在整個文本文件中刪除了許多CRLF,但由於某些原因錯過了許多。我試圖找出原因。如果你在dat文件上運行腳本,你會看到3/4和35/36行格式正確。第38行是問題的位置。即使在刪除第37行和第38行之間的CRLF後,文本也不會格式化爲一行。

我已經玩過其他形式的CRLF格式/ chomping,比如改變/ $變量等,但似乎沒有任何幫助。任何幫助是極大的讚賞!

+0

首先,這兩個鏈接帶我到dat文件。其次,請在將來只使用pastebin.com或gist.com或其他東西。 – Spencer 2012-01-04 13:56:51

+0

固定鏈接,我會繼續關注pastebin.com! – Mike 2012-01-04 16:43:14

回答

0

只需複製/粘貼即可獲得第一個鏈接的正確鏈接。所以這裏是你的修復。首先,您需要設置記錄分隔符(什麼chomp使用),以CRLF:

$/ = "\r\n";    # <--- add that, next line for reference (48) 
my $lineCounter = 0; 

此外,您還需要確保打印新的生產線中的其他情形之一:

$firstRecordFlag = "No"; 
print ulsFileNew "\n";  # <--- add that, previous line for reference (74) 

你應該很好走。

+0

謝謝你的迴應。我嘗試追加更改,但似乎沒有正常工作。 CRLF不再被刪除,現在每行(記錄)之間還有一個額外的空間。 – Mike 2012-01-04 14:22:07

+0

刪除打印行固定記錄之間的額外空間。將記錄分隔符設置爲CRLF不會更改錯誤。我認爲在默認情況下,當在Windows平臺 – Mike 2012-01-04 14:56:47

+0

中,/ $ var被設置爲\ r \ n,我刪除了$ /並且翻了兩遍,問題仍然存在。除37/38外,其他所有線路都很好。如果有人可以觀察附加的dat文件,甚至可以運行腳本來查看我在說什麼,將不勝感激! – Mike 2012-01-04 17:49:12