5

在读取 csv 文件中的特定行时,我尝试使用SplFileObject::fseekwith fgetcsv

要读取第 2 行(例如),我执行 afseek(1)并读取 with fgetcsv,得到第 2 行。

当我做 afseek(0)并阅读时fgetcsv,我有第 0 行。

所以以这种方式读取第 1 行是有问题的。(我知道我可以连续阅读 2 行但不认为这很好)。

我发现 2008 年 PHP 版本 5.2.6 报告了这个问题:SplFileObject: fgetcsv after seek 返回错误的行

我正在使用 PHP 版本 5.4.19。

有人有这方面的信息吗?这是故意的吗?

4

1 回答 1

1

我知道这是一个非常古老的错误,但它仍然在 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();
    }

}
于 2017-10-28T23:05:47.060 回答