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=]
如有任何帮助,我们将不胜感激。
谢谢!
您可以尝试 Linq 和 query 以获得所需的行,如下所示:
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);
我有从软件中获取的 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=]
如有任何帮助,我们将不胜感激。 谢谢!
您可以尝试 Linq 和 query 以获得所需的行,如下所示:
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);