首页 > 解决方案 > fgetcsv 跳过 csv 文件中的空白列并给出偏移错误

问题描述

我有这个脚本,它将数据从file1复制到newFile。在将其复制到新文件之前,我使用索引填写了一些空列(所有行都相同),它给了我一个偏移错误。

例如,我的 file1.csv 看起来像这样

aa,bb,cc,,ee,,,
aa,bb,cc,,ee,,,
aa,bb,cc,,ee,,,
aa,bb,cc,,ee,,,

我希望的输出如下

aa,bb,cc,abcd,ee,,,  
aa,bb,cc,abcd,ee,,, 
aa,bb,cc,abcd,ee,,,  
aa,bb,cc,abcd,ee,,,

由于第 4 列是空的,(检查 file1.csv) fgetcsv 只读取到cc,因为它在cc. 所以ee被跳过了。所以我得到的偏移错误输出是(newFile),剩余的逗号和分隔符逗号也不见了。

aa bb cc abcd
aa bb cc abcd
aa bb cc abcd
aa bb cc abcd

我想用所有逗号分隔的值和所有剩余的逗号创建一个 newFile。让我知道您是否可以通过任何一种方式帮助我。

这是我的脚本

//Open the old file for reading
$file1 = fopen("myfile2.csv", "r");
 
//Create a new file for writing
$newFile = fopen("$fname", "w+"); 

while (($row = fgetcsv($file1, 1000)) !== FALSE) {
    $var = "abcd";
    //insert at 3rd index
    $row[3]=$var;
    //write data into new file
    fputcsv($newFile, array_values($row), ','); 
}
fclose($file1);

标签: phpfgetcsvfputcsv

解决方案


您只输出array_values()并且只有该数组的前 4 次出现有值,因此它看起来被截断了。我认为整个array_values()用法不正确,因此将$row数组输出fputcsv()如下

//Open the old file for reading
$file1 = fopen("myfile2.csv", "r");
 
//Create a new file for writing
$newFile = fopen("$fname", "w+"); 

while (($row = fgetcsv($file1, 1000)) !== FALSE) {
    $var = "abcd";
    //insert at 3rd index
    $row[3]=$var;
    //write data into new file
    fputcsv($newFile, $row);    // <- changed here
}
fclose($file1);

推荐阅读