【发布时间】:2016-10-27 11:21:15
【问题描述】:
我有一个非常大的文件需要用 Perl 解析。文件格式(我无法更改)最初是为了允许文件在 Excel 中以 CSV 格式打开。具体到这个问题,我需要用竖线(|)替换每行中的分隔符。通常这不是一项艰巨的工作,但我有一些问题(如下),虽然我有解决方案,但我想知道是否有更有效的方法来完成我的任务。
- 数据本身包含带逗号的 cmets(这意味着我无法找到并替换逗号)
- 每个“单元格”数据值都包含在引号中,但如果单元格为空白,则不存在引号
文件中的示例行:
"Foo Bar","More Foo","More Bar",,,,,"Yet More","Comma,Separated,Statement"
我当前的解决方案类似于下面的代码。它可以工作,但看起来不优雅,需要多次处理每一行(我想避免这种情况,因为这个文件非常大)。
# Change the delimiter
$line =~ s/",,,,,"/|||||/g;
$line =~ s/",,,,"/||||/g;
$line =~ s/",,,"/|||/g;
$line =~ s/",,"/||/g;
$line =~ s/","/|/g;
$line =~ s/^"//; # Remove leading quotation mark
$line =~ s/"$//; # Remove trailing quotation mark
有人可以帮我找到更快、更优雅的解决方案吗?
【问题讨论】:
-
我可以接受这个作为副本。出于某种原因,我没有以该线程中概述的方式考虑问题以找到它。非常感谢!