【发布时间】:2016-06-22 21:47:08
【问题描述】:
我有一个使用 Perl 解析的 CSV 文件。该文件是 Solidworks 2015 生成的 BOM,保存为 XLS 文件,然后在 Excel 中打开并保存为 CSV 文件。
有些单元格有换行符。当我从文件中读取包含这样一个单元格的行时,该行带有换行符。例如,这里有如下一行:
74,,74,1,1,"SJ-TL303202-DET-074-
001",PDSI,"2.25"" DIA. X 8.00""",A2,513,1,
它在 Perl 中作为单行读入。
当我在 Notepad++ 中打开显示所有字符时,我可以看到换行符是由 [CR][LF] 引起的。
所以我认为这样可以删除换行符:
$line =~ s/[\r\n]+//g;
但事实并非如此。
【问题讨论】:
-
你不需要
[],它是一个字符类。既然都是你说的,[CR][LF],试试s/(?:\r\n)+//g。括号()用于分组,因此+适用于整个事物,而?:在内部以使它们不被捕获,因为您不需要记住里面的内容。 -
使用正确处理嵌入换行符的 CSV 解析模块,例如 Text::CSV。
-
同样的问题,但他们建议使用 $row->[8] =~ s/[\r\n]+//g; - 这是我尝试过的。然而这并没有奏效。
标签: perl csv line-breaks