【发布时间】:2011-09-20 00:29:48
【问题描述】:
我正在尝试获取一个 CSV 文件并将每一行导入一个数组(其中每个元素代表一列)。 CSV文件的格式很简单:
item1,item2,item3
nextrowitem1,item2,item3
"items,with,commas","are,in,quotes"
我使用以下方法导入了 CSV 文件:
open(FILE, "test.csv");
@lines = <FILE>;
然后我使用:
foreach(@lines){
@items = split(/regular expression/);
/*Do stuff with @items array*/
}
(请注意,您不需要使用split(/regular expression, $string);,因为如果没有提供字符串,split() 会假定为$_)
在我使用 CSV 文件测试文件之前,其中没有任何项目包含逗号和 split(/,/) 的简单正则表达式。这工作得很好,所以在这个正则表达式之后,文件、读取文件或我的循环没有任何问题。但是,当我点击包含逗号的项目时,它们会被这样划分,这是可以理解的:
1 => "items
2 => with
3 => commas"
4 => "are
5 => in
6 => quotes"
而不是想要的:
1 => items,with,commas
2 => are,in,quotes
谁能帮我开发一个正则表达式来正确拆分这个数组?基本上如果项目以引号(")开头,则需要等到"," 才能拆分。如果item不以引号开头,则需要等到,才能拆分。
【问题讨论】:
-
感谢您链接到那个 =) 绝对是重复的 - 事实上,他的问题比我的更详细。我现在将研究 CPAN,看看我是否可以使用它。