大文本文件查看器如何工作?如何构建大型文本阅读器

Posted

技术标签:

【中文标题】大文本文件查看器如何工作?如何构建大型文本阅读器【英文标题】:How does large text file viewer work? How to build a large text reader 【发布时间】:2010-04-27 11:36:19 【问题描述】:

large text file viewer work 怎么样?

我假设:

线程用于处理文件 文本框逐行更新 使用了有效的内存处理

这些假设正确吗?如果有人要开发自己的,必须和不应该做什么?

我希望使用 DataGrid 而不是 TextBox 来实现一个

我对 C++ 和 python 很熟悉。我可能会使用 QT/PyQT

编辑

我拥有的文件通常在 1.5 到 2 GB 之间。我正在考虑编辑和查看这些文件

【问题讨论】:

您需要编辑还是只阅读?当您使用大文本时,您的意思是多大(MB?GB?)? @David Rodríguez - dribeas 1 - 2 GB 您是否考虑过使用数据库来保存您的数据(因为它显然是网格形式)? 【参考方案1】:

我相信诀窍不是将整个文件加载到内存中,而是使用 seek 等来加载被查看的部分(可能在处理一些滚动之前和之后使用块)。甚至可能使用内存映射缓冲区,尽管我没有这方面的经验。

请意识到修改一个大文件(快速)不同于仅仅查看它。您可能需要将编辑周围的千兆字节数据复制到一个新文件中,这可能会很慢。

【讨论】:

【参考方案2】:

在 Kernighan 和 Plaugher 的经典(古董?)书籍“Pascal 中的软件工具”中,它们涵盖了 ed(1) 版本的开发和设计选择并注意

“警告:edit 是一个很大的 计划(不包括来自 translitfindchange;在 950 行,大了百分之五十 比本书中的任何其他内容都重要。”

而且他们(字面上)甚至没有字符串类型可以使用。由于他们注意到要编辑的文件可能存在于不支持中间任意写入的tape 上,因此他们必须在内存中保留行位置索引并使用临时文件来存储更改、删除和添加,在“保存”命令下将整体合并在一起。他们和您一样,担心内存会限制其可编辑文件的大小。

这种方法的一般结构保存在GNU ed project,尤其是buffer.c

【讨论】:

我知道您可以覆盖文件中的数据(在磁盘上),但我认为不支持在文件中插入文件。 这只是历史意义,但既然你问了......你是对的,大多数磁盘文件系统会让你覆盖文件中间的东西,但不能插入。由于某些磁带编码的机制,在中间写入不会覆盖那里的数据,它会破坏整个文件。

以上是关于大文本文件查看器如何工作?如何构建大型文本阅读器的主要内容,如果未能解决你的问题,请参考以下文章

纯文本文档如何转换成excel工作表

OpenCV从文本文件创建视频

如何提高大型文本文件的数据加载性能[重复]

如何逐行读取大型文本文件,而不将其加载到内存中?

使用 python 生成器处理大型文本文件

Flutter - 如何在我的未来构建器文本小部件中获得价值回报