2016-11-30 24 views
2

首先,我想讀取和存儲有關簡單txt文件的人員信息。如何將文件讀入收集字符串以在C中創建xml#

文件看起來像這樣例如

person=3 
name=Tigan 
sirname=Cenk 
id=1231 
nationality=whatever 
name2=Joo 
sirname2=Boo 
id2=1299 
nationality2=whatever 
<optinal>=whatever 
name3=Joo 
sirname3=Boo 
id3=1211 
nationality3=whatever 

我創建了一個Person類像下面exapmle:

class Person 
    { 
     public string name { get; set; } 
     public string sirname { get; set; } 
     public int id { get; set; } 
     public string nationality { get; set; } 
    } 

然後將以下代碼從文件中讀取行:

List<string> lines = File.ReadAllLines(Path2File).ToList(); 
List<Person> list = new List<Person>(); 

我行與分裂delimeter「=」

foreach (var line in lines) 
    { 
    Char delimiter = '='; 
    string[] contents = line.Split(delimiter); 
    } 

現在我的問題是,我如何可以將內容「[1]」(例如Tigan)放到我的集合數組的競爭對手「[0]」(egname或name1)上的正確位置上012.需要返回包含所有數據的列表以使用它創建xml。

我希望有人能幫助我。

親切的問候。

+0

你可以改變文本文件?使用json會簡單得多。 – HebeleHododo

+0

每個文本文件是否只包含1個人?或者它是一個有很多人和信息的大文本文件? – Fuzzybear

+0

@HebeleHododo - 不,我不能改變文本文件,他們必須留下。 – swtch3k

回答

0

既感謝支持!如果有人有興趣,這裏是一個可能的解決方案,我用:

var person = new Person(); 
    for (int i=1; i < lines.Count; i+=12) 
     { 
      if (lines[i].StartsWith("name")) 
      { 
       person.name = lines[i].Split('=')[1]; 

      } 
      if (lines[i+1].StartsWith("sirname")) 
      { 
       person.sirname = lines[i+1].Split('=')[1]; 

      } 
      if (lines[i+2].StartsWith("id")) 
      { 
       person.id = lines[i+2].Split('=')[1]; 

      } 
      if (lines[i+3].StartsWith("nationality")) 
      { 
       person.nationality = lines[i+3].Split('=')[1]; 

      } 
      try //optional element 
      { 
       if (lines[i + 4].StartsWith("whatever")) 
       { 
        person.whatever = lines[i + 4].Split('=')[1]; 
        i += 1; 
        list.Add(person); 
        person = new Person(); 
        continue; 
       } 
       else 
       { 
        break; //fileformat not supported 
       } 
      catch 
      { 
       list.Add(person); 
       person = new Person(); 
      } 
     } 

親切的問候

0
for (int i=1; i < lines.Length; i+=4) 
{ 
    Person person = new Person(); 
    person.name = lines[i].Split('=')[1]; 
    person.sirname = lines[i+1].Split('=')[1]; 
    person.id = lines[i+2].Split('=')[1]; 
    person.nationality = lines[i+3].Split('=')[1]; 

    list.Add(person); 
} 

你可以用4個元素間隙循環行,並在循環中取4行並將它們添加到person類。你必須開始索引1行的循環,因爲你的第一個元素不是類的一部分!

+1

不錯的做法。我只需要處理一些不止4個元素的人。例如其中一些郵政編碼是最後一個元素。我嘗試解決它會給出反饋。 – swtch3k

0

我會去這樣的事情:

var person = new Person(); 
foreach (var line in lines) 
    { 
    Char delimiter = '='; 
    string[] contents = line.Split(delimiter); 
    switch(contents[0])  
     {   
     case "id": 
      if(person.id != Convert.ToInt32(contents[1]) && person.name != null) 
       { 
        list.Add(person); 
        person = new Person(); 
       } 
      person.id = Convert.ToInt32(contents[1]); 
      break; 
     case "name ": 
      person.name = contents[1]; 
      break; 
     case "sirname":    
      person.sirname = contents[1]; 
      break; 
     //...etc 
     } 
    } 
+0

謝謝你的支持!但我沒有得到如何部分將工作:'案例「人」: if(person.id!= Convert.ToInt32(contents [1])) { list.Add(person); person = new Person(); } person.id =轉換。ToInt32(內容[1]); break;'在你的情況下,它會比較3與任何人的id並且它不匹配。所以所有列表都是空的,因爲person是文件的第一個元素。 – swtch3k

+0

對不起,我認爲在頂端的人是獨特的每個人,我看到它需要的ID。我會編輯我的答案,只需要檢查案例「身份證」 – Fuzzybear

+0

對不起,沒有看到與它的另一個問題,讓我再看看 – Fuzzybear

相關問題