我正在使用脚本将Magento导出的CSV文件转换为制表符分隔的TXT文件。出于某种原因,引号之间有几列。有没有办法完全删除引号?
我的剧本:
<?php
$row = 1;
if (($handle = fopen("/var/www/html/var/export/export_orders.csv", "r")) && $myfile = fopen("/var/www/html/var/export/export_orders.txt", "w")) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
$row++;
fputcsv($myfile, $data, "\t");
}
fclose($handle);
fclose($myfile);
}
?>
我的输出(txt):
100009407 "2018-03-07 02:16:39" processing PayPal freeshipping_freeshipping 6007.0000 0.0000 0.0000 0.0000 6007.0000 6007.0000 6007.0000 0 0 34.0000 2004 "customer name" xxxx "xxxx" xxxx4@gmail.com "xxxx" "address1" 76120 xxxx "xxxx" processing LP012 8855708513503 99.0000 99.0000 2.0000 2.0000 0.0000 0.0000 0.0000 0.0000 0.0000 198.0000 "Home delivery - Nationwide" "10:00 " " 17:00" "2018-03-08 00:00:00"
为什么要引用某些数据?就像我说的,我想没有引号。非常感谢一些专家建议,谢谢
答案 0 :(得分:1)
当使用"
正常的预期行为时,PHP会将fputcsv
放在任何有空格的地方。
所以这个
"10:00 "
有空格,
"2018-03-07 02:16:39"
"customer name"
等
在大多数情况下,除非出现其他问题,这应该没问题,因为PHP可以很好地阅读,Excel也可以。
现在,如果你想摆脱一些空间,比如10:00
那么你可以使用修剪和数组映射
$data = array_map('trim', $data);
<强>更新强>
您可以使用implode,也可以将空字节"\0"
或chr(0)
放入机箱中。你会认为将''
空置在那里会有效,但它不会。但是不要说我告诉你这样做......哈哈......这有点像黑客。
您可以使用这一小段代码进行测试
$f = fopen('php://temp', "w+");
$a = ["the fox", "jumpled", "over the rox"];
fputcsv($f, $a, "\t", chr(0));
rewind($f);
echo str_replace("\t", '\t', fgets($f));
输出:
the fox\tjumpled\tover the rox
还要忽略我对动态流包装器的使用....
答案 1 :(得分:1)
虽然,我不知道你为什么这么做,因为csv-format被广泛使用,但如果你不想要这种格式的任何限制,你可以用{{{{{{{{{ 1}}数组值和implod
它到文件:
fwrite