我有一个PHP脚本,它以TXT格式读取数据库,清理日期字段并将其转换为CSV格式。
我必须读取一行,将每个字段(除以字符数)分成一个数组,应用清理日期功能并按特定顺序将其导出到CSV文件中。
以此行为例:
001001010006700603927229/05/201529/05/2016TELESALUD J312324366523/01/2016RODRIGUEZ ALBERTO 0012345678 RODRIGUEZ JUAN 008765432101/01/1960MTITULAR APLICA
我把它分成一个数组:
$input = [
trim(substr($line, 0, 3)),
trim(substr($line, 3, 3)),
trim(substr($line, 6, 7)),
trim(substr($line, 13, 9)),
trim(substr($line, 22, 10)),
trim(substr($line, 32, 10)),
trim(substr($line, 42, 50)),
trim(substr($line, 92, 1)),
trim(substr($line, 93, 10)),
trim(substr($line, 103, 10)),
trim(substr($line, 113, 50)),
trim(substr($line, 163, 10)),
trim(substr($line, 173, 20)),
trim(substr($line, 193, 50)),
trim(substr($line, 243, 10)),
trim(substr($line, 253, 10)),
trim(substr($line, 263, 1)),
trim(substr($line, 264, 40)),
trim(substr($line, 304, 50)),
trim(substr($line, 354, 10))
];
然后,在将函数应用于对应字段后,我使用此数组重新组织它们:
$output = [
'3',
'3',
$input[10],
$input[13],
$input[15],
$input[16],
'',
'',
'',
'',
$input[17],
'',
$input[3],
$input[14],
$input[4] ." " .$input[5],
'',
$input[19],
$input[0] .$input[1] .$input[2] .$input[3]
];
最后,使用此功能,我将结果导出到CSV:
fputcsv($csv, $output, ";");
这是我的麻烦。 PHP决定在特定字段中包含双引号。这是结果:
3;3;"RODRIGUEZ ALBERTO";"RODRIGUEZ JUAN";19600101;M;;;;;TITULAR;;006039272;0087654321;"20150529 20160529";;APLICA;0010010100067006039272
所有字段都应该是字符串格式,但我的猜测是PHP在包含空格的字段中包含双引号。
如果我将机箱指定为空字符,请执行以下操作:
fputcsv($csv, $output, ";", "");
或者像这样:
fputcsv($csv, $output, ';', chr(0));
它不会在CSV中写入任何行。并且apache日志表明机箱必须是一个角色。我们不能选择白色空间。
此脚本在小型服务器上运行,但处理数百万行。我不想包含另一个删除引号的函数。
有没有办法告诉PHP不要在CSV中包含那些双引号?
答案 0 :(得分:0)
为什么不使用不同的PHP函数,比如fwrite()?