[英]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.