如何从c#中的文本文件中的一行获得10行

时间:2015-11-20 15:01:19

标签: c# .net-4.0 text-files

我正在阅读一个巨大的文本文件,如下所示。现在想要的是,如果我在这里找到一个特定的单词test:,我会将值从该行推送到数据库,并从中输出一个值连接10个后续行的值。所以我希望得到10个后续行,并使用File. Readalllines或任何其他机制将其存储到内存中。如何实现它。截至目前我正在加载整个文本文件到File.Readalllines使应用程序变得非常慢。

using (FileStream fs = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (BufferedStream bs = new BufferedStream(fs))
using (StreamReader sr = new StreamReader(bs))
{
    string s = String.Empty;
    while ((s = sr.ReadLine()) != null)
    {
        if (s.Contains("test:"))
        {
            //
        }
    }
}

修改 我正在研究消费者答案,这里有一个转折假设我有10000行以test:开头,每行有ID我插入的行基于一个ID,如果ID == ID存储在字典中,那么我必须存储接下来的10行而不是前10行,那么怎么做呢?

修改 @spender我做的就像SkipWhile(line => (!line.Contains("ADD GTRX:") && !line.Contains(dict.CellId.ToString()))).Take(10);但没有运气

修改 @spender最后我做了它我必须移动括号如此完整的代码我做了如下所示,我删除空行也

var linesOfInterest = File.ReadLines(filename)
                                                              .SkipWhile(line => !line.Contains("test:")).SkipWhile(line => !line.Contains(dictId.ToString())).Take(10);
                                    var output = string.Join(Environment.NewLine, linesOfInterest).Trim().Split(';').Where(arg => !string.IsNullOrWhiteSpace(arg)).ToArray();

你很棒,过得愉快

1 个答案:

答案 0 :(得分:5)

File.ReadLines是你的朋友。它会给你一个IEnumerable<string>,它懒散地从文本文件中取回行(即文件永远不会完全加载到内存中)。从那里你可以很好地使用它。

var linesOfInterest = File.ReadLines(filePath)
                          .SkipWhile(line => !line.Contains(searchTerm))
                          .Take(10);
var output = string.Join(Environment.NewLine, linesOfInterest);