use*_*220 5 php fseek fgetcsv splfileobject
当读取 csv 文件中的特定行时,我尝试使用SplFileObject::fseekwith fgetcsv。
要读取第 2 行(例如),我执行 afseek(1)并使用 读取fgetcsv,这给出了第 2 行。
当我执行 afseek(0)并使用 读取时fgetcsv,我得到了第 0 行。
所以以这种方式读取第 1 行存在一个问题。(我知道我可以连续阅读两行,但我认为这不太好)。
我发现这个问题在 2008 年 PHP 版本 5.2.6 中报告:SplFileObject: fgetcsv aftereek returns error line。
我使用的是 PHP 版本 5.4.19。
有人有这方面的信息吗?这是故意的吗?
我知道这是一个相当老的错误,但它仍然在 bugs.php 上打开所以这里是我想分享的一个片段以实现相同的目的(至少在我的情况下有效)
function readBigCsv($path, $skip=1)
{
$file = new \SplFileObject($path, 'r');
$file->setFlags(\SplFileObject::READ_CSV);
$file->seek($skip);
while (!$file->eof()){
yield $file->current();
$file->next();
}
}
Run Code Online (Sandbox Code Playgroud)