簡體   English   中英

使用C#在特定單詞之后讀取一行

[英]Read a line after specific word using c#

我正在嘗試解析文本文件,並且遇到了問題。 我需要在“ MESSAGE”一詞后讀一行。

該文件將包含以下示例數據。

信息
2005修理自動橋驅動器側。

信息
1508修理液壓懸架。

在這種情況下,我想閱讀從2005和1508開始的行。

這是我的代碼

List<Record> records = new List<Record>();

using (FileStream fs = new FileStream("SampleData.txt", FileMode.Open)) 
{
    using (StreamReader rdr = new StreamReader(fs))
    {
        string tempreadline;
        tempreadline = rdr.ReadLine();
        while (tempreadline != null)
        {
            if (tempreadline.Contains("MESSAGE")
               {
                     // what do I do here?
                     // skip "MESSAGE" line and read the next line
               }
        }
     }
}

有什么建議么? 謝謝!

方法1

使用您的方法。

Console.WriteLine("METHOD 1");

var records = new List<string>();

using (var fs = new FileStream("d:\\SampleData.txt", FileMode.Open))
{
    using (var rdr = new StreamReader(fs))
    {
        var msgFound = false;
        while (!rdr.EndOfStream)
        {
            var tempreadline = rdr.ReadLine();
            if (tempreadline.Contains("MESSAGE"))
            {
                msgFound = true;
            }
            else if (msgFound && !string.IsNullOrEmpty(tempreadline))
            {
                records.Add(tempreadline);
                msgFound = false;
            }
        }
    }
}

records.ForEach(r => Console.WriteLine(r));

方法2

假設您的文本是單個字符串。

Console.WriteLine("METHOD 2");

var text = File.ReadAllText("d:\\SampleData.txt");
records = text.Split(new[] { "MESSAGE" }, StringSplitOptions.RemoveEmptyEntries)
              .Select(t => t.Trim(' ', '\r', '\n'))
              .Where(t => !string.IsNullOrEmpty(t))
              .ToList();

records.ForEach(r => Console.WriteLine(r));

方法3

假設您的文本是一個字符串列表。

Console.WriteLine("METHOD 3");

var texts = File.ReadLines("d:\\SampleData.txt");
records = texts.Where(t => !string.IsNullOrEmpty(t) && !t.StartsWith("MESSAGE"))
               .ToList();

records.ForEach(r => Console.WriteLine(r));

方法4

使用正則表達式。

Console.WriteLine("METHOD 4");

records = new Regex(@"^MESSAGE[\s]*$", RegexOptions.IgnoreCase | RegexOptions.Multiline)
                .Split(text)
                .Select(t => t.Trim(' ', '\r', '\n'))
                .Where(t => !string.IsNullOrEmpty(t))
                .ToList();

records.ForEach(r => Console.WriteLine(r));

如果文件中包含所需的內容,則可以結合使用File.ReadAllLines方法( 此處描述)和Linq擴展方法,如下所示。 數組DesiredLines可以進一步處理。

var DesiredLines = File.ReadAllLines("C:\FileName.txt")
                       .Where( iLine => iLine != "MESSAGE" && iLine != "")
                       .ToArray();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM