需要帮助编辑文本文件中的CRFL

时间:2012-01-04 13:51:43

标签: newline chomp

我是perl的新手,我正在尝试解决他们在他们的网站上亲切上传的某些人的脚本。该脚本打开一个文本文件(存储在.dat中)并删除CRLF以正确格式化文件,以便批量导入SQL数据库。我正在使用SQLite3,它对数据中的工件效果不佳。

脚本位于此处: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,例如更改/ $变量等,但似乎没有任何帮助。非常感谢任何帮助!

1 个答案:

答案 0 :(得分: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)

你应该好好去。