C#查询(从文本文件中读取)

时间:2016-07-26 17:05:06

标签: c# asp.net-mvc visual-studio-2013

我想从文本文件中读取一个由新行分隔的文本块,但块中的行数不一致。我认为ReadLine方法会跳过换行符(如果我错了,请纠正我)。

文本文件示例:

asdlkf dfadfj adfasdf
asdfaf asdfjaslfk asdfjasldf
asdfajsdf

slfasdf
asdfasdf
adssdfas;
asdfasdfj

asdfasdf
asdfasdf

2 个答案:

答案 0 :(得分:0)

string[] s = File.ReadAllText(FileLocation).Replace("\r", "").Split('\n');

for(int i =0; i < s.Length; i++)
    MessageBox.Show(s[i]);//This will display each line in a message box.

这将读取文件的所有文本然后删除\ r \ n(这将阻止您获得您不需要的愚蠢额外行)然后.Split将\ r分割成一个数组,其中&#34;输入&#34;会是

对不起这个例子我不太好xD:P

答案 1 :(得分:0)

(我假设一个块是一组由空行分隔的文本。根据你的问题我还不完全清楚。)

File.ReadAllLines()也可以正常工作......但是这里有你如何使用迭代器模式。

public static IEnumerable<string> GetBlocks(string filename)
{
    using (var reader = new StreamReader(filename))
    {
        var sb = new StringBuilder();
        while (!reader.EndOfStream)
        {
            var line = reader.ReadLine();
            if (string.IsNullOrWhiteSpace(line))
            {
                if (sb.Length != 0)
                    yield return sb.ToString();
                sb.Clear();
            }
            else
                sb.AppendLine(line);
        }
        if (sb.Length != 0)
            yield return sb.ToString();
    }
}

......用法......

var blocks = GetBlocks("fortunes.txt");

...结果......

blocks = new [] {
    "asdlkf dfadfj adfasdf
     asdfaf asdfjaslfk asdfjasldf
     asdfajsdf",
    "slfasdf
     asdfasdf
     adssdfas;
     asdfasdfj",
    "asdfasdf
     asdfasdf",
};