2012-11-19 27 views
0

我使用以下代碼將數據存儲在數組中,然後將其打印出來。如何從txtfile讀取,然後將信息傳遞給另一個類c#

Person[] people = {new Person("Loki", "Lo", "Asgard", 2050), 
           new Person("Thor", "Th", "Asgard", 2050), 
           new Person("Iron", "Man", "Il", 4050), 
           new Person("The", "Hulk", "Green", 1970)}; 

現在我想從這些信息的文本行中讀取並使用相同的數組。如何?

txt文件看起來像這樣

The Hulk Green 1970 
Iron Man Il 4050 
Thor Th Asgard 2050 
Loki Lo Asgard 2050 

我正在考慮在一個字符串數組存儲的話,然後用[0],[1]等每個字。但是循環會導致問題,因爲我只想使用一個「人」。有什麼建議麼?

+1

@MicahArmantrout只有2個問題,他並沒有接受一個答案,這是其中之一... ...可能要檢查多少問題80%的解決方案從中計算。 – Jelly

+0

@jelly好電話 –

+0

這與wpf有什麼關係? –

回答

1

這裏是不使用LINQ

Person[] people= new Person[4]; 
using(var file = System.IO.File.OpenText(_LstFilename)) 
{ 
    int j=0; 
while (!file.EndOfStream) 
    { 
     String line = file.ReadLine(); 

     // ignore empty lines 
     if (line.Length > 0) 
     {  

      string[] words = line.Split(' '); 
      Person per= new Person(words[0], words[1], words[2], Convert.ToInt32(words[3])); 

      people[j]=per; 
      j++ 

     } 

} 
+0

謝謝你!正是我需要的! –

+0

你可能想要檢查'words.Length> = 4'來確保一個簡短的行不會導致一個'IndexOutOfRangeException'如果這對你的任務有幫助的話不會有任何線索。 – Thymine

2

我會添加一個Person構造函數,它接收一行「數據」並相應地解析它。

然後,你可以這樣做:

var people = File.ReadLines("yourFile.txt") 
       .Select(line => new Person(line)) 
       .ToArray(); 

如果你不想額外的構造函數:

var people = File.ReadLines("yourFile.txt") 
       .Select(line => line.Split()) 
       .Select(items => new Person(item[0], item[1], item[2], Convert.ToInt32(item[3])) 
       .ToArray(); 

你應該注意的是,這裏沒有提供解決方案具有良好的異常處理。

+0

謝謝奧斯汀!由於分配,我不喜歡使用LINQ。 –