【发布时间】:2013-06-03 12:39:02
【问题描述】:
我正在处理来自geonames.org 的 csv 文件,因此我需要获取没有任何附件的 csv 行。
目前fgetcsv() 要求您为$enclosure 参数提供单个字符,否则将不会处理 CSV 数据。
如何使用 php 原生功能检索没有包围字符的 csv 数据?
【问题讨论】:
-
逐行读取,然后自己将数据解析为所需的格式
我正在处理来自geonames.org 的 csv 文件,因此我需要获取没有任何附件的 csv 行。
目前fgetcsv() 要求您为$enclosure 参数提供单个字符,否则将不会处理 CSV 数据。
如何使用 php 原生功能检索没有包围字符的 csv 数据?
【问题讨论】:
作为一种可能的解决方法,您可以使用奇数字符作为附件:
// Read TSV line using 'backspace' as the enclosure character
fgetcsv($stream, 0, "\t", chr(8));
【讨论】:
如前所述,最简单的方法是根本不使用 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);
【讨论】: