gpt4 book ai didi

PHP fgetcsv 和自定义行结束符

转载 作者:可可西里 更新时间:2023-11-01 01:00:15 25 4
gpt4 key购买 nike

我正在使用 php 导入一个 csv,因为 csv 有时可能很大,所以我通过使用以下代码一次流式传输 4096 字节的文件来这样做:

if(($handle = fopen($file, 'r')) !== false)
{
// loop through the file line-by-line
while(($data = fgetcsv($handle)) !== false)
{
echo var_dump($data);
unset($data);
}
fclose($handle);
}
else
{
echo "unable to open file $file <br>";
}

一些 csvs 有一个非标准的行结束符 ';'并且我需要能够手动指定结束行,以便 fgetcsv 正确获取 csv 的每一行。

我读过其他建议使用 ini 设置的解决方案:

ini_set("auto_detect_line_endings", true);

但这并没有解决我遇到的问题。

此问题的先前解决方案是获取整个文件并修改所有非标准行结尾并将其替换为回车和换行。随着 csvs 大小的增加,此解决方案不再有效。

我在 var 转储中得到的是 csv 的所有行,而不是 csv 的一行。来自 CSV 的示例行:

"col1,col2,col3,col4,col5;col1,col2,col3,col4,col5;col1,col2,col3,col4,col5;"

最佳答案

由于 fgetcsv() 没有更改行尾的工具,您可以选择使用 stream_get_line() 读取文件直到分隔符,然后解析带有 str_getcsv() 的行

// Given a delimiter...
$delimiter = ";";

if(($handle = fopen($file, 'r')) !== false) {
// Read the line up to the delimiter
while ($line = stream_get_line($handle, 4096, $delimiter)) {
// Parse the CSV line into an array
$data = str_getcsv($line);
var_dump($data);
}
fclose($handle);
}

关于PHP fgetcsv 和自定义行结束符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29579077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com