2013-07-04 105 views
0

我有一个文本文件,我想处理和导入。 <TEAM>行包含一个包含与其相关的数据的团队。当另一行包含<TEAM>时,它会重复该过程。我的问题是,不是保持跟踪或线路,抓取数据,或按顺序处理数据,有没有办法读取标志(<TEAM>),并将所有数据存储在字符串中,然后在C#中的下一个<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 
+1

你可以只添加回来在团队中的每个项目。 –

+0

我知道,但我想知道是否有更优雅的东西..哈哈 –

回答

0

一个黑客一点,但应该工作

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

|未在文件中使用其他地方应作为长期工作。如果是这样,那么就用一个唯一的字符或字符串替换它。

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 
相关问题