在C中搜索的理想文件

时间:2016-12-06 13:50:04

标签: c string search

我想创建一个文件,我可以搜索特定的字符串,并在找到该字符串时获取值,就像在表格中一样。

想象一下:

"String1" => "val1"
"String2" => "val2"
"String3" => "val3"

如果我向我的程序提供值" String1"它将返回" val1"

我知道我可以简单地将它放在一个txt文件中并逐行读取,但这需要花费很多时间,是否有一种文件或一种让它更快的方法?

谢谢

1 个答案:

答案 0 :(得分:2)

您所描述的几乎就是数据库索引的作用。但是,这些通常不表示为文本文件。这部分是因为有效地搜索这样的索引需要随机访问文件的内容,至少在逐个记录的基础上,以及大多数人对文本的定义。文件"与固定长度的记录不一致。此外,这样的文件不能手动修改,没有破坏它的风险(通常可能)。

您可以使用固定格式文件进行更多或更少的操作,其中按键按排序顺序进行维护。例如,也许每一行的结构为12个字节的键,后跟68个字节的值,必要时带有 重要的 尾随空格,然后是" \ r \ N'#34;行终止符(这样您的文本文件也可以在Windows上轻松读取,无需修改代码或数据)。使用这样的文件结构,您可以执行二进制搜索以查找键,这比线性搜索更有效。请注意,我说" bytes"而不是"字符"故意 - 如果您使用可变长度的字符编码(如UTF-8)会有所不同。

在类似的路线上还有其他更多参与的替代方案;它们需要向文件添加额外的元数据,因此使文件更难以直接解释或修改。其中一些最简单的方法可以让您在记录的基础上为更长的密钥交换更短的数据。

另请注意,如果将整个文件读入内存是可行的选择,则没有任何意义。这将消除对固定格式的任何需求,并且产生比任何需要将文件I / O作为搜索过程的组成部分执行的替代方案所期望的更快的搜索。