我是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,例如更改/ $变量等,但似乎没有任何帮助。非常感谢任何帮助!
答案 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)
你应该好好去。