大文本文件查看器如何工作?如何构建大型文本阅读器
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
是一个很大的 计划(不包括来自translit
、find
和change
;在 950 行,大了百分之五十 比本书中的任何其他内容都重要。”
而且他们(字面上)甚至没有字符串类型可以使用。由于他们注意到要编辑的文件可能存在于不支持中间任意写入的tape 上,因此他们必须在内存中保留行位置索引并使用临时文件来存储更改、删除和添加,在“保存”命令下将整体合并在一起。他们和您一样,担心内存会限制其可编辑文件的大小。
这种方法的一般结构保存在GNU ed project,尤其是buffer.c
【讨论】:
我知道您可以覆盖文件中的数据(在磁盘上),但我认为不支持在文件中插入文件。 这只是历史意义,但既然你问了......你是对的,大多数磁盘文件系统会让你覆盖文件中间的东西,但不能插入。由于某些磁带编码的机制,在中间写入不会覆盖那里的数据,它会破坏整个文件。以上是关于大文本文件查看器如何工作?如何构建大型文本阅读器的主要内容,如果未能解决你的问题,请参考以下文章