2016-12-06 32 views
-1

我想创建一个文件,我可以搜索特定的字符串,并找到该字符串时找到一个值,如在表中。理想的文件搜索在C

想象一下以下内容:

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

我想,如果我给我的程序价值“的String1”将返回“VAL1”

我知道我可以简单地把它放在一个txt文件并逐行阅读,但这需要很长时间,是否有一种文件或使其更快的方式?

谢谢

+0

鉴于文件是文本,除了一次一行之外,您还希望如何阅读它?你怎么知道它会“花费太多时间”? – dbush

+0

你需要编写一些代码。天真的,它会像这样的伪代码:'如果x ==“String1”返回“val1”;否则,如果x ==“String2”返回“val2”; elseif ....'等 –

+0

等什么?那么,你是问如何生成一个文本文件,或者搜索它,你是说搜索一个字符串键比搜索一个字符串更快? – George

回答

2

你描述的是一个很值得数据库索引做什么。但是,这些通常不表示为文本文件。这部分是因为有效地搜索这样的索引需要随机访问文件的内容,至少在逐个记录的基础上,并且大多数人对“文本文件”的定义与固定长度记录不一致。另外,这样的文件不能自由地手动修改而没有破坏它的风险(通常是可能性)。

当您使用固定格式的文件进行描述时,您可以进行一些或多或少的操作,其中按照排序顺序维护键。例如,也许每一行的结构为12个字节键,然后按68个字节的值,用显著尾随必要的空间,其次是“\ r \ n”个行终止(让你的文本文件轻松阅读在Windows上,也不需要修改代码或数据)。通过这样的文件结构,您可以对查找键执行二进制搜索,这比线性搜索更有效率。请注意,我有意地说“字节”而不是“字符” - 如果您使用可变长度字符编码(如UTF-8),则会有所不同。

沿着相似的路线还有其他更多涉及的替代方案;他们需要为文件添加额外的元数据,因此使文件更难以直接解释或修改。其中最简单的一些将使您能够以记录为基础在较短的记录中交换较短的数据。

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

+0

这是我的想法。我想制作一个服务器,并且我正在寻找根据收到的扩展名获得内容类型字段的最佳方法 – user7122079

+1

@ user7122079,除非您希望数据太大而无法将服务器进程保存在内存中,否则以任何适合你的格式写文件要好得多,让服务器在启动时读取整个文件。构建*内存*表示以进行高效搜索。只有在数据量非常大或内存很小的情况下,才会考虑对磁盘上的文件执行搜索。 –