- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我读取了一个大约 500MB 的大文本文件,并希望了解读取操作的进度。
为此,我现在计算文件的行数,然后将其与我已阅读的行进行比较。这需要对文件进行两次完整的迭代。使用文件大小和 fgets 缓冲区大小是否有更简单的方法?
我当前的代码如下:
$lineTotal = 0;
while ((fgets($handle)) !== false) {
$lineTotal++;
}
rewind($handle);
$linesDone = 0;
while (($line = fgets($handle)) !== false) {
progressBar($linesDone += 1, $lineTotal);
}
最佳答案
基于字节而不是行,但您可以使用 filesize
快速获取文件的总大小:
$bytesTotal = filesize("input.txt")
然后,打开文件后,您可以阅读每一行,然后得到您的 current position在文件中,类似于:
progressBar(0, $bytesTotal);
while (($line = fgets($handle)) !== false) {
doSomethingWith($line, 'presumably');
progressBar(ftell($handle), $bytesTotal);
}
需要注意的是,PHP 整数可能无法处理超过 2G 的文件,但是,由于您指定的文件约为 500M,因此这不应该是一个直接的问题。
关于php - Fgets 进步 - 更简单的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33297208/
我读取了一个大约 500MB 的大文本文件,并希望了解读取操作的进度。 为此,我现在计算文件的行数,然后将其与我已阅读的行进行比较。这需要对文件进行两次完整的迭代。使用文件大小和 fgets 缓冲区大
我正在尝试将数据从 Progress 4GL 数据库中取出,放入 SQL Server。 理想情况下,我想直接在 .NET 中执行此操作,而不是通过 ODBC 驱动程序,因为正在进行的 ODBC 驱动
我正在使用以下具有句柄的查询,但即使我删除/不删除句柄的对象,我也看不到任何反应。但是每个人都说最后总是删除对象。为什么我们需要删除它们?如果我们不删除它们会怎样?我们怎么看? finally:
我正在使用以下具有句柄的查询,但即使我删除/不删除句柄的对象,我也看不到任何反应。但是每个人都说最后总是删除对象。为什么我们需要删除它们?如果我们不删除它们会怎样?我们怎么看? finally:
我需要在一个涉及 Progress 9.1D 应用程序和 C 语言函数之间交互的项目中工作。我负责编写 C 函数,Progress 人员要求我调查是否可以发送 Progress 表并在 C 函数中将其
我是一名优秀的程序员,十分优秀!