【问题标题】:Read File And Split Into Multiple Parts Based On Flag in C#读取文件并根据 C# 中的标志拆分为多个部分
【发布时间】:2013-07-04 21:42:20
【问题描述】:

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

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

【问题讨论】:

  • 您可以将其重新添加到团队中的每个项目中。
  • 我知道,但我想知道是否有更优雅的东西..哈哈

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


【解决方案1】:

有点小技巧,但应该可以工作

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

只要| 没有在您文件中的其他任何地方使用,它就应该可以工作。如果是,则只需将其替换为唯一字符或字符串即可。

【讨论】:

    【解决方案2】:

    也许有点像,不是很优雅,但如果&lt; TEAM &gt; 只需要它下面的 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多