我正在尝试读取一个5000行的文本文件。但是我只想获取每100行中的前10行。因此第1-10行,第101-110行,第200-210行等。我只是无法想出要使用的逻辑。
$count = count(file($text))
for ($i = 0; $i < $count; $i++)
{
$test = fgets($f_text)
}
我正在尝试读取一个5000行的文本文件。但是我只想获取每100行中的前10行。因此第1-10行,第101-110行,第200-210行等。我只是无法想出要使用的逻辑。
$count = count(file($text))
for ($i = 0; $i < $count; $i++)
{
$test = fgets($f_text)
}
使用% 100
,仅打印出$n % 100 > 0 && $n % 100 <= 10
的行。
$lines = file($text);
foreach ($lines as $n => $line) {
if ($n % 100 > 0 && $n % 100 <= 10) {
echo $line; // or whatever
}
}
foreach (range(0,250) as $n => $line) {
if ($n % 100 >= 1 && $n % 100 <= 10 ) {
echo $i . "\n";
}
}
1 2 3 4 5 6 7 8 9 10 101 102 103 104 105 106 107 108 109 110 201 202 203 204 205 206 207 208 209 210
如果您知道文件中有多少行,您可以轻松地使用SPLFileObject
完成此操作:
$file = new SplFileObject( $filename, "r");
$lines = 0;
while ( !$file->eof()) {
$file->fgets();
$lines++;
}
现在你知道文件中有$lines
行。如果这是静态的,比如5000行,只需将$lines
初始化为5000。如果不是静态的,让我们将其四舍五入到最近的100行:
$lines -= ($lines % 100);
$data = array();
for( $i = 0; $i < $lines; $i += 100) {
$file->seek( $i);
for( $j = 0; $j < 10; $j++) {
$data[] = $file->fgets();
}
}
$lines
声明为静态值。 - nickb根据其他答案,可能是最节省内存的方法:
foreach(new SplFileObject($filename) as $n => $line)
if($n % 100 < 10)
echo $line;