【问题标题】:How can you use fgetcsv when there is no enclosure character?没有附件字符时如何使用 fgetcsv?
【发布时间】:2013-06-03 12:39:02
【问题描述】:

我正在处理来自geonames.org 的 csv 文件,因此我需要获取没有任何附件的 csv 行。

目前fgetcsv() 要求您为$enclosure 参数提供单个字符,否则将不会处理 CSV 数据。

如何使用 php 原生功能检索没有包围字符的 csv 数据?

【问题讨论】:

  • 逐行读取,然后自己将数据解析为所需的格式

标签: php csv fgetcsv


【解决方案1】:

作为一种可能的解决方法,您可以使用奇数字符作为附件:

// Read TSV line using 'backspace' as the enclosure character
fgetcsv($stream, 0, "\t", chr(8));

【讨论】:

  • 函数名“char”中的错字,应该是“chr”。
【解决方案2】:

如前所述,最简单的方法是根本不使用 fgetcsv()。您可以使用普通的 fgets() 函数从 CSV 中读取每一行,然后使用 explode() 创建一个包含每行所有不同字段的数组

这是一个小例子:

$handle = fopen("foo.csv", "r");

$i = 1;  // for test output

while (($buffer = fgets($handle)) !== false) {
    $fields = explode(";", $buffer);  // assuming that fields are separated with semicolons

    $j = 1;

    // Test output
    echo "Line $i: ";
    // This is just for show, you can use a regular for loop instead
    foreach ($fields as $field) {
        echo "Field $j: $field";
        $j++;
    }

    echo "\n";
    $i++;
}

fclose($handle);

【讨论】:

  • 这不考虑 fgetcsv 提供的转义功能,并且可能导致在 csv 数据中使用分号的格式错误的字符串。不过,对于大多数情况,这是一个可行的解决方案。
猜你喜欢
  • 1970-01-01
  • 2015-10-29
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多