【问题标题】:Compare User Input Text to CSV File C#将用户输入文本与 CSV 文件 C# 进行比较
【发布时间】:2016-04-05 14:47:41
【问题描述】:

如果我有来自 c# 文本框中的用户输入,并且有一个包含单词的 CSV 文件,例如,用户输入是:“哇,太酷了,哈哈”和 CSV 文件:

哈哈大笑

ROFL 在地板上打滚笑

如何比较输入文本以在文件中找到匹配项?我将如何加载文件?

【问题讨论】:

  • csv文件中的字段是如何分隔的?

标签: c# file csv text compare


【解决方案1】:

你可以这样做:

string input = "Wow that's cool LOL";
string[] splitArray = input.Split();
bool ifFound = File.ReadLines("yourCVSFilePath.csv")
                .Any(line => splitArray.Any(line.Contains));

它正在做:

  • 将输入拆分为一个单词数组,以便单独进行比较。
  • 逐行加载文件(延迟加载)
  • 比较以查看拆分数组中的任何单词是否与该行中的任何单词匹配。

如果你想执行字符串比较忽略大小写,那么你可以这样做:

bool ifFound = File.ReadLines("yourCVSFilePath.csv")
                .Any(line => 
                        splitArray.Any(sa => 
                                    line.IndexOf(sa, StringComparison.CurrentCultureIgnoreCase) > -1));

【讨论】:

  • 一个 csv 通常包含多个字段,您正在使用带有 line.Contains 的子字符串搜索,而不是仅检查字段。因此,lollipop 的值也将与 LOL 匹配。
  • 蒂姆,这更像是一个文本文件,然后是一个CSV,虽然有多个字段,(可能用逗号分隔),但从问题看起来像这样OP 将对每个字段进行比较,而不仅仅是特定字段。
  • 当然,但似乎 OP 想要检查所有字段,但我认为它应该是完全匹配而不是部分匹配。看看我的棒棒糖示例。
  • 那么您是说输入中的每个单词都应该存在于 CSV 中吗?而不仅仅是一个词?
【解决方案2】:

您可以使用File.ReadLines 从 csv 文件中读取行并使用 LINQ 对其进行过滤:

string input = "Wow that's cool LOL";
string[] words = input.Split();

char delimiter = '\t';  // for example
IEnumerable<string> matchingLines = File.ReadLines("yourCVSFilePath.csv")
    .Where(line => words.Intersect(line.Split(delimiter)).Any())
    .ToList(());

Intersect...Any 方法是此替代查询的优化版本:

......
.Where(line => words.Any(word => line.Split(delimiter).Contains(word)))

【讨论】:

    猜你喜欢
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 2022-09-22
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多