【问题标题】:php ; using fgetcsv with SplFileObject::fseek ; line read issuephp;将 fgetcsv 与 SplFileObject::fseek 一起使用;行读问题
【发布时间】:2013-12-31 09:08:14
【问题描述】:

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

要读取第 2 行(例如),我执行 fseek(1) 并使用 fgetcsv 读取,得到第 2 行。

当我执行 fseek(0) 并使用 fgetcsv 阅读时,我有第 0 行。

因此以这种方式读取第 1 行存在问题。 (我知道我可以连续阅读 2 行但不认为它很好)。

我发现 2008 年 PHP 版本 5.2.6 报告了这个问题:SplFileObject: fgetcsv after seek returns wrong line

我使用的是 PHP 版本 5.4.19。

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

【问题讨论】:

  • 最好链接到 PHP 错误站点:bugs.php.net/bug.php?id=46569
  • 他们没有关闭错误报告,所以我不认为这是故意的。他们只是还没来得及修复它。

标签: php fgetcsv fseek splfileobject


【解决方案1】:

我知道这是一个相当老的错误,但它仍然在 bugs.php 上打开 所以这是我想分享的一个 sn-p 以实现相同的效果(至少在我的情况下有效)

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();
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-16
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多