【问题标题】:fgetcsv skip blank columns in csv file and gives Offset errorfgetcsv 跳过 csv 文件中的空白列并给出偏移错误
【发布时间】:2021-12-02 22:39:35
【问题描述】:

我有这个脚本,它将数据从 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);

【问题讨论】:

  • 无法重现,该代码似乎可以满足您的要求。 $fname 设置了吗?
  • @brombeer $fname 已设置。 $file1$file。请参考编辑过的。
  • 您使用的是什么操作系统和什么版本的 PHP?你得到什么确切的错误信息?如前所述,无法重现,Linux Mint,PHP 7.4.24 (cli)
  • @brombeer (Windows, PHP 7) Undefined offset: 3 in ////pg.php 虽然我得到一个错误,文件是用输入的值创建的,但不是在路上我希望。
  • 它给了我一个偏移错误请总是告诉我们错误信息。完整的未汇总错误消息。

标签: php fgetcsv fputcsv


【解决方案1】:

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

//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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多