我正在尝试将制表符分隔的.txt文件转换为.csv文件。
我能够使用fgetcsv()打开txt文件并使用以下代码获取每行的数据:
$handle = fopen("fileurl.com", "r");
$row = 1;
if (($handle = fopen("fileurl.com", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, "\t")) !== FALSE) {
$num = count($data);
echo "<p> $num fields in line $row: <br /></p>\n";
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
}
print_r($data);
}
fclose($handle);
}
现在我只需要从数据数组中创建一个csv文件。我尝试过使用fputcsv(),但没有运气。我尝试过类似的东西,但它创建的csv文件不正确,只有1行:
$fp = fopen('file.csv', 'w');
fputcsv($fp, $data, "\t");
fclose($fp);
如何从$ data数组创建.csv文件的示例非常棒。我花了很多时间研究并尝试解决这个问题,但却无法让它发挥作用。
答案 0 :(得分:7)
fputcsv()
一次只能写一行。不是整个文件。您需要遍历$data
才能将所有数据添加到CSV文件中。
$fp = fopen('file.csv', 'w');
foreach ($data as $line) {
fputcsv($fp, $line);
}
fclose($fp);
使用您的代码的完整示例:
$handle = fopen("fileurl.com", "r");
$lines = [];
if (($handle = fopen("fileurl.com", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, "\t")) !== FALSE) {
$lines[] = $data;
}
fclose($handle);
}
$fp = fopen('file.csv', 'w');
foreach ($lines as $line) {
fputcsv($fp, $line);
}
fclose($fp);
答案 1 :(得分:0)
这是将数据写入csv文件的正确方法
<?php
$list = array (
array('aaa', 'bbb', 'ccc', 'dddd'),
array('123', '456', '789'),
array('"aaa"', '"bbb"')
);
$fp = fopen('file.csv', 'w');
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
?>
在fputcsv中,我们使用第二个参数作为数组。
答案 2 :(得分:0)
以及$ attachment = mb_convert_encoding($ attachment,'UTF-8',$ parts [$ i]-> parameters [0]-> value); tsv到csv也需要。它将文件类型更改为text / plain