【发布时间】:2021-05-14 01:29:38
【问题描述】:
有没有一种方法可以在文本文件中获取特定行,而无需在 C 中逐行迭代?
例如,我有这个文本文件names.txt,它包含以下名称;
John
James
Julia
Jasmine
我想立即访问 'Julia' 而不遍历 'John' 和 'James'?,例如,只需给出索引值 '2' 或 '3' 即可立即访问 'Julia'。
有没有办法在 C 中做到这一点?
我只是想知道如何处理,因为我想处理一个非常大的文本文件,比如大约 30 亿行,我想立即访问其中的特定行,并且逐行迭代非常慢
【问题讨论】:
-
你需要在你的文本文件上建立一个索引:第二个文件,它为每一行存储它开始的偏移量,作为一个固定大小的整数。在这一点上,您可能更愿意使用数据库(查看 SQLite 以了解易于集成的内容)。
-
将索引构建为@YakovGalka 允许您读取文件一次以构建索引。之后,使用
fseek进入任何线路都很快。或者,您可以将所有行(例如使用 nuls)填充到最大行长度。然后你可以通过乘法找到任何行的字节偏移量。当然,这样浪费了填充所需的磁盘空间。但是您不需要额外读取索引来获取每一行。