C#从文本文件中读取字符串

时间:2011-03-14 11:40:52

标签: c# wpf

对于你们来说这可能是一个简单的...我有一个ViewModel类,它生成一个字符串集合,我稍后将其绑定到我的UI。我想更改逻辑,以便不是手动输入字符串,而是从.txt文件中读取它们(因此我给它一个文件的路径,并从该文件中读取单词)。有人能提供快速解决方案吗?非常感谢 - 本

public class VM
{
    public VM()
    {
        Words = LoadWords();

    }

    public IEnumerable<string> Words { get; private set; }

    private static IEnumerable<string> LoadWords()
    {
        Random random = new Random();

        string loremIpsum =
            "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
        string[] tokens = loremIpsum.Split(new char[] { ' ' });
        List<string> words = new List<string>();
        for (int i = 0; i < 500; i++)
        {
            words.Add(tokens[random.Next(tokens.Count())]);
        }
        return words;
    }
}

4 个答案:

答案 0 :(得分:9)

使用File.ReadAllLines()

private static IEnumerable<string> LoadWords(String filePath)
{
      List<String> words = new List<String>();
      foreach(String line in ReadAllLines(filePath))
      {

        string[] tokens = line.Split(new char[] { ' ' });
        for (int i = 0; i < 500; i++)
        {
            words.Add(tokens[random.Next(tokens.Count())]);
        }
      }
      return words;
}

答案 1 :(得分:1)

将您的Words定义为ObservableCollection<String>而不是Enumerable<string>。据我所知,这应该足以将它绑定到UI:你的其余代码对我来说似乎很好。

如果您需要获取文件的上下文,请使用File.ReadAllText()

更新

使用此代码段在令牌化方面做得更好:

string filename = @"c:\myfile.txt";
string content = File.ReadAllText(filename);
        ObservableCollection<string> strings = new ObservableCollection<string>();
foreach (Match m in Regex.Matches(content,@"\b(\S+)\b"))
{
    strings.Add(m.Groups[1].Value);
}

答案 2 :(得分:0)

 string line = "";
using (StreamReader sr = File.OpenText("PathToFile"))
{
    while ((line = sr.ReadLine()) != null)
    {
        if (line.Trim() != "")
        {
         string[] tokens = line.Split(new char[] { ' ' });
         //Process the tokens
        }
    }
}

答案 3 :(得分:0)

此代码将文本文件读入您​​的字符串数组(假设每个字符串都在新行上):

    TextReader tr = File.OpenText("c:\LoremIpsum.txt");
    string s = null;
    List<string> list = new List<string>();
    while ((s = tr.ReadLine()) != null)
    {
        list.Add(s);
    }
    string[] tokens = list.ToArray();