0

単語リストがあります。プログラムがテキスト ファイルから複数の単語をスキャンするようにします。

これは私がすでに持っているものです:

int counter = 0;
        string line;
        StringBuilder sb = new StringBuilder();

        string[] words = { "var", "bob", "for", "example"};

        try
        {
            using (StreamReader file = new StreamReader("test.txt"))
            {
                while ((line = file.ReadLine()) != null)
                {
                    if (line.Contains(Convert.ToChar(words)))
                    {
                        sb.AppendLine(line.ToString());
                    }
                }
            }

            listResults.Text += sb.ToString();
        }
        catch (Exception ex)
        {
            listResults.ForeColor = Color.Red;
            listResults.Text = "---ERROR---";
        }

ファイルをスキャンして単語を探し、そこにない場合は次の単語をスキャンします...

4

3 に答える 3

0

これはうまくいきます:

var query =
    from line in System.IO.File.ReadLines("test.txt")
    where words.Any(word => line.Contains(word))
    select line;

これらを単一の文字列として取得するには、次のようにします。

var results = String.Join(Environment.NewLine, query);

これ以上簡単なことはありません。


単語全体のみを一致させたい場合は、もう少し複雑になります。あなたはこれを行うことができます:

Regex[] regexs =
    words
        .Select(word => new Regex(String.Format(@"\b{0}\b", Regex.Escape(word))))
        .ToArray();

var query =
    from line in System.IO.File.ReadLines(fileName)
    where regexs.Any(regex => regex.IsMatch(line))
    select line;
于 2015-02-06T11:53:36.847 に答える
0
StringBuilder sb = new StringBuilder();             
string[] words = { "var", "bob", "for", "example" };
string[] file_lines = File.ReadAllLines("filepath");
for (int i = 0; i < file_lines.Length; i++)         
{                                                   
    string[] split_words = file_lines[i].Split(' ');
    foreach (string str in split_words)             
    {                                               
        foreach (string word in words)              
        {                                           
            if (str == word)                        
            {                                       
                sb.AppendLine(file_lines[i]);       
            }                                       
        }                                           
    }                                               
}                                                   
于 2014-01-29T19:07:40.127 に答える