PHP - 将制表符分隔的TXT文件转换为CSV

Tho*_*ade 1 php csv

我正在尝试将制表符分隔的.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);
}
Run Code Online (Sandbox Code Playgroud)

现在我只需要从数据数组创建一个csv文件.我尝试过使用fputcsv(),但没有运气.我尝试过类似的东西,但它创建的csv文件不正确,只有1行:

$fp = fopen('file.csv', 'w');

fputcsv($fp, $data, "\t");

fclose($fp);
Run Code Online (Sandbox Code Playgroud)

如何从$ data数组创建.csv文件的示例将非常棒.我花了很多时间研究并试图解决这个问题,但却无法让它发挥作用.

Joh*_*nde 7

fputcsv()一次只写一行.不是整个文件.您需要循环$data才能将所有数据添加到CSV文件中.

$fp = fopen('file.csv', 'w');
foreach ($data as $line) {
    fputcsv($fp, $line);
}
fclose($fp);
Run Code Online (Sandbox Code Playgroud)

使用代码的完整示例:

$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);
Run Code Online (Sandbox Code Playgroud)