繁体   English   中英

c# - 如何从文本文件中的一行中获取以下10行#

[英]how to get 10 lines below from a line in text file in c#

我正在阅读一个巨大的文本文件,如下所示。现在想要的是,如果我遇到一个特定的词,比如test:在这里,我将从该行将值推送到数据库中,其中一个值是通过连接 10 个后续行的值来实现的.所以我想获得 10 行,并使用File. Readalllines将其存储到内存中File. Readalllines File. Readalllines或任何其他机制。我将如何实现它。 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:开头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();

你很棒,祝你有美好的一天

File.ReadLines是您的朋友。 它为您提供了一个IEnumerable<string> ,它可以懒惰地从文本文件中返回行(即文件永远不会完全加载到内存中)。 从那里你可以很好地 LINQ。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM