如何搜索文本文件c中存在的两个或多个单词

时间:2017-09-18 05:27:54

标签: c#

我有3个文本文件,即

input.txt
array1.txt
array2.txt

input.txt文件包含以下行:

 the file in
 the computer is 
removedby user,
there are seven
 wonders in the      world 
ithink...

array1.txt文件包含:

computer 
user 
good

array2.txt文件包含:

seven
world 
none

我想用array1.txt和array2.txt检查input.txt中是否存在单词

我想说的是例如:input.txt中的单词与array1.txt中的单词匹配意味着输出必须是“computer”存在于array1中。如果单词与array2.txt匹配则表示它应该显示array2中存在的单词。

输出:单词计算机和用户出现在array1单词世界中,七个出现在array2

我在c#中的代码:

int count;
using (StreamReader reader = File.OpenText("C:/Users/input.txt"))
{
  string contents = reader.ReadToEnd();
  MatchCollection matches = Regex.Matches(contents, "computer", RegexOptions.IgnoreCase);
  count = matches.Count;
 }
if (count > 0)
{
    MessageBox.Show("present");
}
else
{
    MessageBox.Show("absent");
}

1 个答案:

答案 0 :(得分:1)

我采取不同的方法:

  1. 为了阅读文件(除非它是一个需要流媒体的大文件),我使用File.ReadAllTextFile.ReadAllLines
  2. 要检查文本中是否存在字符串,请转到Contains而不是正则表达式。
  3. 最后我使用linq Where方法检查数组中每个项目的谓词
  4. 所以:

    var arr1 = File.ReadAllLines("array1.txt"); // Reading to get string[] - item for each line
    var arr2 = File.ReadAllLines("array2.txt");
    var input = File.ReadAllText("input.txt"); // Reading to get one string for all text
    
    var arr1WordsInInput = arr1.Where(input.Contains);
    var arr2WordsInInput = arr2.Where(input.Contains);
    

    如果你想找到匹配的所有索引,你可以使用这个问题Finding ALL positions of a substring in a large string in C#的回答中建议的函数:

    var result = arr1.Select(w => new {  Word = w, Indexes = input.AllIndexesOf(w) })
                     .Where(w => w.Indexes.Any());
    

    这将返回IEnumerable,其中每个项目包含两个属性:匹配的单词以及在input文本中找到它的索引