【问题标题】:Search a .csv file for name match in C在 C 中搜索 .csv 文件以查找名称匹配项
【发布时间】:2012-11-06 05:06:24
【问题描述】:

我目前有一个 .csv 文件,其中包含三个字段:用户、密码、类型。例如,我的文件如下所示:

michael, sun123, user  
joseph, sierra7, user  
isaac, apple2, sysop 

我想从此类文件中读取并检查列表中是否存在用户“isaac”。到目前为止,我能够打开文件并将文件的每个字符放入一个名为 database[] 的一维数组中。我设置了一个指针,指向我的 database[] 数组的第一个字符。我的问题是:如何在文件中找到“isaac”?

我的想法是检查我正在寻找的用户的第一个字符是否与我的数组中的字符匹配。如果是这样,只要不打逗号,我就会开始检查下一个字符。当我点击逗号时,我会检查是否存在密码、逗号和类型,然后使用布尔值进行回车。有没有更简单的方法?

提前致谢!

【问题讨论】:

标签: c search csv find replace


【解决方案1】:

您可以使用strstr(database, "isaac"); 的结果在您的database[] 中找到“isaac”。

您可以使用 strtok(或者它是安全的变体,在此处详细介绍 http://msdn.microsoft.com/en-us/library/ftsafwz3(v=vs.80).aspx)将您的 database[] 分解为更易于管理的项目(即,在逗号和换行符上标记化)以满足您的解析需求。

strtokstrstrstrcmp 的组合可能是您想要的。

【讨论】:

  • 非常感谢您的快速回复!我将充分利用 strstr。我唯一关心的是,如果一个用户的用户名与另一个用户的密码相同怎么办?在我的示例中,用户的用户名可能是:sierra7。解决这个问题的好方法是什么?
  • @iHubble:您使用 grep 或 findstr 并输入像 ^sierra7 这样的模式来表示 sierra7 必须位于行首。或者,当您调用 strstr 时,检查它是否告诉您子字符串位于行首。
  • 您知道在哪里可以找到有关 strstr 命令的更多信息吗?我想用它来检查子字符串是否在行首。也许我可以检查 *(&ptr - 1) == '\n' 吗?
  • @iHubble 您可以向后查找 '\n' 字符以确保您找到了用户名并向前计数逗号以识别用户/系统操作员,但在我看来,这个过程确实已经完成比它应该的更复杂,因为database[] 是一个一维数组。如果你可以一次处理一行文件,我认为代码会更容易编写、更干净、更安全、更可靠。那时,我会考虑使用 strtok 将每一行分解为字符串,使用循环修剪空白,使用 strcmp 来识别用户和用户的权限为用户或系统操作员。
  • @antik 你的想法似乎不错。我实际上必须实现诸如添加、删除、编辑和验证之类的功能。在编辑内容时,仅在单独的行上工作实际上会容易得多。
猜你喜欢
  • 2014-12-16
  • 2017-09-12
  • 1970-01-01
  • 2012-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多