【发布时间】:2014-11-17 09:52:20
【问题描述】:
我有一个文本文件(类似于 CSV 概念)来解析并加载到不同的列中。
我从无法修改的外部应用程序收到它。 它用 ”;”作为字段分隔符,但不幸的是,我们也可以在某些内容中使用相同的字符。
这里有一个小例子:
Code;Name;Address;E_mail;Contact name
000001;FUTURAMA SNC;VIA BARBAPAPA, 1;info@gmail.com;matteo futuro;
000006;FERRANTIBUS SRL;VIA TOPOLINO, 1;amministrazione@gmail.com;nicola ferri;
000008;MORMORO SPA;VIA CICCETTI, 30;"cri@mormoro.it; rossi@mormoro.it";panebianco gianpietro;
我们使用这段代码来解析文件
$file = fopen("C:\\wamp\\www\\testcsv\\customers.csv","r");
$result ="";
$i=0;
while(! feof($file))
{
$result[$i++]= fgets($file);
}
for($j=1;$j<count($result);$j++){
$tempData = preg_split("/[;]/",$result[$j]);
print_r( $tempData );
}
如您所见,在示例文件的最后一行,我们有“;” char inside email field....所以它被读取为另一个列分隔符,在第三条记录中,电子邮件字段被拆分为 2 列,结果我有一个额外的列。
有什么办法,用正则表达式跳过; char 是否在 "" 字符内?
提前感谢您的帮助
【问题讨论】:
-
当 PHP 已经有 fgetcsv 并爆炸时,为什么还要这样做?
-
$data = fgetcsv($file, 0, ';', '"', '"');