C#读取txt文件的部分内容

C# Reading parts of txt file

我有从软件中获取的 txt 文件,看起来像这样。

----------------------------------------------------------------------------
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
----------------------------------------------------------------------------

XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX

-- YYYYYYYYYYYYYY ----------------------------------------------------------
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX

-- YYYYYYYYY ---------------------------------------------------------------
 (1) AAAAAAAAAAAAAA
 (2) BBBBBBBBBBBBBB
 (3) CCCCCCCCCCCCCC

----------------------------------------------------------------------------
 (1) AAAAAAAAAAAAAA
----------------------------------------------------------------------------
           Model : AAAAAAAAAAAAAA
        Firmware : XXXXXXXXXXXXXX
   Serial Number : 00000000000000
       Disk Size : 999 GB

-- XXXXXXXXXX --------------------------------------------------------------

我只需要读取这部分的数据:

----------------------------------------------------------------------------
 (1) AAAAAAAAAAAAAA
----------------------------------------------------------------------------
           Model : AAAAAAAAAAAAAA
        Firmware : XXXXXXXXXXXXXX
   Serial Number : 00000000000000
       Disk Size : 999 GB

-- XXXXXXXXXX --------------------------------------------------------------

我试过这样的 StreamReader:

StreamReader sw = new StreamReader(txtFile);
while (!sw.EndOfStream)
{
    string line = sw.ReadLine();
    if (line.Contains("(1)"))
    {
        OtherFunction(line);
    }
}
sw.Close();

但这并不奏效。我不能使用某些只能从第 20 行读取到第 23 行的函数。我需要对 SteamReader 说他必须从包含 ------------------ 的行读取到包含 -- XXXXXXXXXX ----[ 的行=15=]

如有任何帮助,我们将不胜感激。 谢谢!

您可以尝试 Linqquery 以获得所需的行,如下所示:

using System.IO;
using System.Linq;

...

var lines = File
  .ReadLines(txtFile)
  .SkipWhile(line => !line.Contains("(1)"))         // Skip all lines before "...(1)..." 
  .SkipWhile(line => !line.Contains("-------------------")) // -/- "----"
  .Skip(1)                                          // Skip "----" itself
  .TakeWhile(line => !line.Contains("XXXXXXXXXX"))  // Take all lines before "...XXXXXX..."
  .ToArray();                                       // Have lines as an array 

我会使用 File.ReadAllLines() 而不是 StreamReader,其中 returns 一个字符串数组。

然后你可以遍历数组,直到找到你想要的结果提取并继续。 例如:

var lines = File.ReadLines(txtFile);