gpt4 book ai didi

php - SplFileObject + LimitIterator + 偏移量

转载 作者:搜寻专家 更新时间:2023-10-31 21:30:03 26 4
gpt4 key购买 nike

我有两行数据文件(两行仅用于我的示例,实际上,该文件可以包含数百万行)并且我使用 SplFileObject 和 LimitIterator 进行偏移。但这种组合在某些情况下有奇怪的行为:

$offset = 0;
$file = new \SplFileObject($filePath);
$fileIterator = new \LimitIterator($file, $offset, 100);
foreach ($fileIterator as $key => $line) {
echo $key;
}

输出为:01

但是当 $offset 设置为 1 时,输出为空白(foreach 不会迭代任何行)。

我的数据文件包含这个:

{"generatedAt":1434665322,"numRecords":"1}
{"id":"215255","code":"NB000110"}

我做错了什么?

谢谢

最佳答案

必需:

使用 SplFileObject 处理来自以下位置的大量记录:

  • 一个给定的起始记录号
  • 对于给定数量的记录或直到 EOF

问题是 SplFileObject 对文件中的 last record 感到困惑。这会阻止它在 foreach 循环中正常工作。

此代码使用 SplFileObject 和“跳过记录”和“处理记录”。唉,它不能使用 foreach 循环。

  • 从文件开头跳过一些记录 ($offset)。
  • 处理给定数量的记录或以文件结尾为单位 ($recordsToProccess)

代码:

<?php

$filePath = __DIR__ . '/Q30932555.txt';
// $filePath = __DIR__ . '/Q30932555_1.txt';

$offset = 1;
$recordsToProcess = 100;

$file = new \SplFileObject($filePath);

// skip the records
$file->seek($offset);

$recordsProcessed = 0;
while ( ($file->valid() || strlen($file->current()) > 0)
&& $recordsProcessed < $recordsToProcess
) {
$recordsProcessed++;
echo '<br />', 'current: ', $file->key(), ' ', $file->current();
$file->next();
}

关于php - SplFileObject + LimitIterator + 偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30932555/

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