【发布时间】:2011-09-02 10:08:07
【问题描述】:
我正在做一个项目,我需要读取内存中的文本(源)文件并能够执行随机访问(例如,检索与第 3 行第 15 列对应的地址)。
我想知道是否有既定的方法可以做到这一点,或者数据结构特别适合这项工作。我需要能够执行(可能摊销)恒定时间访问。我正在使用 C 语言工作,但如果值得的话,我愿意实现更高级别的数据结构。
我的第一个想法是使用一个包含文件字符数据的大缓冲区链表。我还会创建一个数组,其索引是行号,内容是对应于行首的地址。该数组将根据需要重新分配。
辅助问题:有人知道源文件的平均大小吗?我很惊讶没有在谷歌上找到这个。
澄清一下:
我关心的文件是源文件,所以它们的大小应该是可管理的,它们不应该被修改,并且行的长度是可变的(希望限制在某个最大值)。
我正在处理的问题主要需要一个只读文件表示,但我对挖掘这个问题非常感兴趣。
结论:
Data Structures for Text Sequences 论文中对用于维护文件(支持读取/插入/删除)的数据结构进行了非常有趣的讨论。
如果您只需要只读,只需获取文件大小,使用 fread() 将其读取到内存中,然后您必须维护一个动态数组,该数组将行号(索引)映射到指向第一个字符的指针线。下面有人建议懒惰地构建这个数组,这在很多情况下似乎是个好主意。
【问题讨论】:
标签: c file memory data-structures