【问题标题】:finding all the words in a .txt file c#查找 .txt 文件中的所有单词 c#
【发布时间】:2017-06-14 00:47:44
【问题描述】:

所以我试图用流式阅读器读取文本文件的每一行,从那里我进入一个 while 循环以到达文件的末尾,for 循环是将每个标记打印到列表框。我觉得这应该可行!

编辑:我的问题是如何读取选定的文件、分隔单词并将它们打印到列表框?

  if (openFile.ShowDialog() == DialogResult.OK)
            {
                StreamReader inputFile;
                inputFile = File.OpenText(openFile.FileName);
                string line;
                //int totalWords;

                char[] delim = { '.', '!', '?', ',', '(', ')' };

                while (!inputFile.EndOfStream)
                {
                    line = inputFile.ReadLine();
                    string[] tokens = line.Split(delim);
                    for (int i = 0; i < tokens.Length; i++)
                    {
                        wordListBox.Items.Add(tokens[i]);
                    }
                }
              inputFile.Close();
            }

【问题讨论】:

  • 那么,您的问题是什么?你想知道我们是否有同样的感觉吗?
  • 我会在 using 块中使用 StreamReader。例如:使用 (StreamReader inputFile = File.OpenText(openFile.FileName))
  • 来自help center寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及必要的最短代码在问题本身中重现它。没有明确问题陈述的问题对其他读者没有用处。 我看不到具体的问题或错误(我什至看不到模糊的问题)。我也没有看到任何问题。您可能需要花几分钟时间阅读How to Ask,然后再返回edit您的帖子以使其更清晰。
  • 首先你的问题很糟糕。因此,如果您以正确的方式提问,您会看到它是 duplicate

标签: c# token delimiter


【解决方案1】:

如果将空格字符 '\n''\r''\t'' ' 添加到分隔符数组会怎样?然后你可以调用File.ReadAllText,它将整个文件作为一个字符串返回,并在你的分隔符上分割它(同时删除空条目)。

之后,您可以将一组单词添加到您的ListBox

if (openFile.ShowDialog() == DialogResult.OK)
{
    char[] delims = { '.', '!', '?', ',', '(', ')', '\t', '\n', '\r', ' ' };

    string[] words = File.ReadAllText(openFile.FileName)
        .Split(delims, StringSplitOptions.RemoveEmptyEntries);

    foreach (string word in words)
    {
        wordListBox.Items.Add(word);
    }
}

【讨论】:

    【解决方案2】:

    如果您尝试使用 StreamReader 用文件中的单词填充 ListBox - 您应该考虑一下,因为 StreamReader 用于文件/网络流案例,以处理大文件或网络延迟/传播等。如果你有一个大文件 - 填充 ListBox 太多项目是一个好习惯吗?我不这么认为。但是,根据您的问题,如果您想使用 StreamReader 执行此操作,请检查此实现:

            string filename = @"D:\text.txt";
            var words = new List<string>();
            char[] delims = { '.', '!', '?', ',', '(', ')', '\t', '\n', '\r', ' ' };
    
            try
            {
                using (var reader = new StreamReader(filename))
                {
                    while (!reader.EndOfStream)
                    {
                        var line = reader.ReadLine();
                        words.AddRange(line.Split(delims, StringSplitOptions.RemoveEmptyEntries));
                    }
                }
            }
    
            // now you dont need to close stream because
            // using statement will handle it for you
    
            catch // appropriate exception handling
            {
    
            }
    
            foreach (string word in words)
            {
                wordListBox.Items.Add(word);
            }
    

    【讨论】:

      【解决方案3】:

      这确实有效....主要是。 txt 文档仍在后台运行。但是,新行 (\n) 和 (\t) 没有用分隔符分隔。为此,我认为需要使用拆分功能。

      感谢您的帮助。

      【讨论】:

      • 将此信息放入问题中。也不清楚你的意思是什么
      • 这不是答案。请更新您的问题或问题的 cmets。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      • 2012-10-08
      相关资源
      最近更新 更多