我正在c#中编写代码,应该以每行单个单词的形式读取文本文件。例如 :


  ”
  阿里斯
  克朗诺斯
  阿里斯
  克朗诺斯
  阿里斯
  克朗诺斯
  。
  。
  ”


该代码应一次读取每一行,如果它们不存在,则将它们写在列表框中。

因此,步骤应为:


  1)读取(文件中的行)
  
  2)检查(如果单词已经在列表框中)
  
  3)如果单词未出现在列表框中,则创建一个新项,如果不跳到下一行。


我在此代码中遇到的问题是,该代码将单词与列表框中的项目进行比较,然后跳到下一个,但是有时没有(看起来好像有时跳过了循环,所以没有)

string file = @"C:\file.txt";
int Readlines = 0;
int lineNumber = 1;
int AllLines = File.ReadLines(file).Count();
int m = 1;
for (int z = 1; z <= AllLines; z++)
{
       string cLine = File.ReadLines(file).Skip(Readlines).Take(1).First();
       foreach (string item in listBox1.Items)
       {
           while (item == cLine || cLine == "")
               {
                    Match_Label.Text = "Found " + m + " matches!";
                    Readlines++;
                    cLine = File.ReadLines(file).Skip(Readlines).Take(1).First();
                    m++;
               }
        }
        string newline =  cLine;
        listBox1.Items.Add(newline);
        Readlines++;
 }

最佳答案

这是一个不依赖那些扩展方法的答案:

        using (var reader = File.OpenText("c:\file.txt"))
        {
            while (!reader.EndOfStream)
            {
                string line = reader.ReadLine();
                if (!listBox.Items.Contains(line))
                    listBox.Items.Add(line);
            }
        }


您可以在看到效果后添加输出消息和计数器。您还可以包括其他条件,例如在添加之前确保该行的长度> 0。

09-08 07:51