【问题标题】:Ideal files for search in C在 C 中搜索的理想文件
【发布时间】:2016-12-06 13:50:03
【问题描述】:

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

想象一下:

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

我希望如果我给我的程序值“String1”它会返回“val1”

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

谢谢

【问题讨论】:

  • 鉴于该文件是文本,除了一次一行之外,您还希望如何阅读它?你怎么知道它会“花费太多时间”?
  • 你需要写一些代码。天真地应该是这样的伪代码:if x == "String1" return "val1"; else if x == "String2" return "val2"; elseif .... 等。
  • 等等什么?那么,您是在问如何生成文本文件,还是搜索它,您是说搜索字符串键会比搜索字符串更快吗?
  • 我希望如果我有一个字符串,我应该从文件中检索另一个与我搜索的字符串相对应的字符串......就像在 Mysql 中完成一样,我可以搜索一个参数并我可以获得与此相关的所有信息。
  • 您的文件有多长。是几十行,几百,几千,几百万?答案取决于此。上下文是什么,为什么需要这个?答案也取决于此。

标签: c string search


【解决方案1】:

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

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

还有其他类似的、更复杂的替代方案;它们需要向文件添加额外的元数据,因此使人更难以直接解释或修改文件。其中一些最简单的方法可以让您逐条记录地用较短的数据换取较长的密钥。

还要注意,如果将整个文件读入内存是一个可行的选择,那么这一切都没有任何意义。这将消除对固定格式的任何需求,并产生比您期望的更快的搜索速度,而不是需要将文件 I/O 作为搜索过程的一个组成部分来执行的任何替代方案。

【讨论】:

  • 这是我最初的想法。我想做一个服务器,我正在寻找根据收到的扩展名获取内容类型字段的最佳方法
  • @user7122079,除非您希望您的数据太大而服务器进程无法保存在内存中,否则最好以您方便的任何格式写入文件,并拥有服务器在启动时阅读整个内容。构造 in-memory 表示以进行高效搜索。只有当您的数据非常大或内存非常少时,您才应该考虑对磁盘上的文件执行搜索。
猜你喜欢
  • 2020-08-06
  • 2018-12-10
  • 1970-01-01
  • 2012-07-10
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
  • 2011-09-20
  • 1970-01-01
相关资源
最近更新 更多