Php 删除生成文件中的引号
我正在使用脚本将Magento导出的CSV文件转换为以制表符分隔的TXT文件。但由于某些原因,引号之间有几列。有没有办法完全删除引号 我的剧本:Php 删除生成文件中的引号,php,fopen,Php,Fopen,我正在使用脚本将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",
<?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);
}
?>
为什么引用某些数据?就像我说的,我希望没有任何引用。一些专家建议将不胜感激,谢谢你当使用fputcsv
时,PHP会将“
放在任何有空格的地方,这是正常的预期行为
那么这个
"10:00 "
有一个空间,就像
"2018-03-07 02:16:39"
和“客户名称”
等等
在大多数情况下,除非有其他错误,否则这应该很好,因为PHP可以很好地读取它,Excel也可以
现在,如果您想去掉一些空格,例如10:00
,那么可以使用trim和array map
$data = array_map('trim', $data);
更新
您可以使用内爆,也可以将空字节“\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
另外,请忽略我对动态流包装器的使用…当使用fputcsv
时,PHP会将“
放在任何有空格的地方,这是正常的预期行为
那么这个
"10:00 "
有一个空间,就像
"2018-03-07 02:16:39"
和“客户名称”
等等
在大多数情况下,除非有其他错误,否则这应该很好,因为PHP可以很好地读取它,Excel也可以
现在,如果您想去掉一些空格,例如10:00
,那么可以使用trim和array map
$data = array_map('trim', $data);
更新
您可以使用内爆,也可以在存储模块中放入空字节“\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
另外,请忽略我对动态流包装器的使用…不过,我不知道您为什么要这么做,因为csv格式被广泛使用,但是如果您不想对这种格式有任何限制,您可以创建一个所需格式的字符串,只需
插入数组值并将其写入文件:
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
$row++;
fwrite($myfile, implode("\t", $data) . "\n");
// or with PHP_EOL as line end
// fwrite($myfile, implode("\t", $data) . PHP_EOL);
}
fclose($handle);
fclose($myfile);
尽管如此,我不知道您为什么要这么做,因为csv格式被广泛使用,但如果您不想对这种格式有任何限制,您可以创建一个所需格式的字符串,只需inplod
ing数组值并fwrite
将其写入文件:
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
$row++;
fwrite($myfile, implode("\t", $data) . "\n");
// or with PHP_EOL as line end
// fwrite($myfile, implode("\t", $data) . PHP_EOL);
}
fclose($handle);
fclose($myfile);
如果您不需要所有csv功能,请使用内爆
。这些值在输入文件中有引号吗?不,它们没有@nigelrenco您能详细说明@u_mulder吗?我们有我们的程序员,但他只是擅离职守,我只是想让这个work@Dan更改fputcsv($myfile,$data,“\t”)
到fputcsv($myfile,str_replace(“,”$data),“\t”);
如果不需要所有这些csv功能,请使用内爆
。这些值在输入文件中有引号吗?不,它们没有@NigelRenCould您可以详细说明@u_mulder吗?我们有程序员,但他刚刚越狱,我只想知道这一点work@Dan更改fputcsv($myfile,$data,“\t”);
到fputcsv($myfile,str_replace('''','$data),“\t”);
如何在我当前的脚本中解决这个问题?我真的不是程序员,我只是想让它正常工作。非常感谢您的帮助,谢谢您移动空间…例如trim(“10:00”)
不,它不起作用-我需要这个来处理脚本处理脚本
这意味着什么。弄乱CSV格式是一个非常滑的斜坡。@请尝试另一个答案。在答案下面添加一条注释,说明它起作用了或没有。我如何在我当前的脚本中解决这个问题?我真的不是程序员,我只是希望它起作用。你的帮助非常感谢您移动空间…例如trim(“10:00”)
不,它不起作用-我需要这个来处理脚本处理脚本
这意味着什么。弄乱CSV格式是一个非常滑的斜坡。@请尝试另一个答案。在答案下添加一条注释,说明它起作用了还是不正确。+1.现在OP必须确认它起作用了还是没有作用?@AlivetoDie,尽管我不知道这个文件是怎么写的标签和空格的混乱将被进一步解析。@ArtisticPhoenix这就是为什么我不知道OP想要什么。如果他想要用标签分隔的值-这就是解决方案。是的,我认为它是逗号,只要数据中没有标签就可以了。但是我不会弄乱格式,不管他需要它做什么,他应该用逗号来解决这个问题“我不知道该如何进一步解析这个标签和空格混乱的文件。@ArtisticPhoenix这就是为什么我不知道OP想要什么。如果他想要用w分隔的值,我会告诉他。”关于制表符-这就是解决方案。是的,我认为它是逗号,只要数据中没有制表符就可以了。但是我不会弄乱格式,不管他需要它做什么,他应该修复它,而不是弄乱它。@NigelRen-没有PHP,是垃圾…哈哈。\n
在windows上运行良好。