根据C#中的标志读取文件并拆分成多个部分

时间:2013-07-04 21:42:21

标签: c# asp.net text-files delimiter text-processing

我有一个我想要处理和导入的文本文件。 < TEAM >行包含一个团队,其下有与之相关的数据。然后,当另一行包含< TEAM >时,它会重复该过程。我的问题是,有没有一种方法可以读取标志(< TEAM >),并将其下的所有数据存储在下一个{{< TEAM >之前的字符串中,而不是保持跟踪或线条并抓取数据或按顺序处理它们。在C#中1}}?我希望之后逐个处理该字符串列表。下面的代码有效,但我想保留&lt; TEAM&gt;,在字符串中。

var teams = file.ReadToEnd().Split(new [] {  "< TEAM >" }, StringSplitOptions.RemoveEmptyEntries);

< TEAM >
NAME    ADDRESS CITY    STATE   COUNTRY ZIP
Spokane Legacy 16U  1111 S Rowan Terrace Lane   Spokane Washington  US  99206
< COACHES >
DUTY    NAME    ADDRESS CITY    STATE   PROVINCE    COUNTRY ZIP PHONE   EMAIL   APPROVAL NUM    BBCS APPROVED

< TEAM >
NAME    ADDRESS CITY    STATE   COUNTRY ZIP
Spokane Legacy 16U  1111 S Rowan Terrace Lane   Spokane Washington  US  99206
< COACHES >
DUTY    NAME    ADDRESS CITY    STATE   PROVINCE    COUNTRY ZIP PHONE   EMAIL   APPROVAL NUM    BBCS APPROVED

2 个答案:

答案 0 :(得分:0)

有点黑客但应该工作

string[] splitTeams = teams.Replace("< TEAM >", "|< TEAM >").Split(new [] { '|' }, StringSplitOptions.RemoveEmptyEntries);

只要|未在文件中的任何其他位置使用,该工作就应该有效。如果是,则只用一个唯一的字符或字符串替换它。

答案 1 :(得分:0)

也许是类似的东西,不是很优雅,但如果< TEAM >只需要它下面的2行(标题和数据),它就有效

    var lines = File.ReadAllLines("c:\\stackoverflow.txt");
    var result = lines.Select((s, i) => s.Equals("< TEAM >") ? lines.Skip(i).Take(3) : null).Where(x => x != null);

返回:

< TEAM >
NAME    ADDRESS CITY    STATE   COUNTRY ZIP
Spokane Legacy 16U  1111 S Rowan Terrace Lane   Spokane Washington  US  99206

< TEAM >
NAME    ADDRESS CITY    STATE   COUNTRY ZIP
Spokane Legacy 16U  1111 S Rowan Terrace Lane   Spokane Washington  US  99206