【发布时间】:2016-04-05 14:47:41
【问题描述】:
如果我有来自 c# 文本框中的用户输入,并且有一个包含单词的 CSV 文件,例如,用户输入是:“哇,太酷了,哈哈”和 CSV 文件:
哈哈大笑
ROFL 在地板上打滚笑
如何比较输入文本以在文件中找到匹配项?我将如何加载文件?
【问题讨论】:
-
csv文件中的字段是如何分隔的?
如果我有来自 c# 文本框中的用户输入,并且有一个包含单词的 CSV 文件,例如,用户输入是:“哇,太酷了,哈哈”和 CSV 文件:
哈哈大笑
ROFL 在地板上打滚笑
如何比较输入文本以在文件中找到匹配项?我将如何加载文件?
【问题讨论】:
你可以这样做:
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));
【讨论】:
line.Contains 的子字符串搜索,而不是仅检查字段。因此,lollipop 的值也将与 LOL 匹配。
您可以使用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)))
【讨论】: