2012-09-15 169 views
2

將將逗號分隔的文本文件轉換爲通用列表有點麻煩。我有一個類(稱爲 「客戶」)具有以下屬性定義:將逗號分隔的文本文件轉換爲通用列表

  • 名稱(字符串)
  • 市(串)
  • 平衡(雙)
  • CardNumber(INT)

這些值將以這種格式存儲在文本文件中:名稱,城市,平衡,CarNumber例如約翰,孟菲斯,10,200789。這將有多行。我想要做的是當用戶點擊一個按鈕時,每行都被放置在一個列表項中。

我已經解決了我可以使用.Split()方法打破每一行,但不知道如何使正確的值進入列表的正確屬性。 (請注意:我知道如何使用get/set屬性,並且我不允許使用LINQ來解決問題)。

任何幫助表示讚賞,因爲我只是在學習,並且一直在努力工作,而沒有運氣。謝謝

編輯:
對不起,看來我沒有讓自己清楚。我知道如何使用.add。 如果我在文本文件中有兩行: A,B,1,2和 C,D,3,4 我不知道該怎麼做是在列表項中的名稱「字段」位置0等於「A」,並且位置1中的項目中的名稱「字段」等於「C」等等。

對不起,術語不好用,我只學習。希望你明白我在問什麼(我確信一旦知道它確實很容易)

+0

「但不知道如何使正確的值進入列表的正確屬性」---使用'='? – zerkms

+0

readline - foreach - new object() - list.Add? – hndr

回答

1

讀取文件並根據換行符分割文本。然後爲總行數運行一個循環,該循環將根據逗號分割並創建一個新對象,並在其屬性中插入值並將該對象添加到列表中。

這樣

List<Customers> lst = new List<Customers>(); 

string[] str = System.IO.File.ReadAllText(@"C:\CutomersFile.txt") 
          .Split(new string[] { Environment.NewLine }, 
                StringSplitOptions.None); 

for (int i = 0; i < str.Length; i++) 
{ 
    string[] s = str[i].Split(','); 

    Customers c = new Customers(); 

    c.Name = s[0]; 
    c.City = s[1]; 
    c.Balance = Convert.ToDouble(s[2]); 
    c.CardNumber = Convert.ToInt32(s[3]); 

    lst.Add(c); 
} 

BTW類名應該是Customer,而不是Customers

+0

ReadAllText.Split使用太多內存,速度慢。一次只讀一行。 –

0

拆分()生成在它們出現在源串中的順序字符串數組。因此,如果您的名稱字段是CSV文件中的第一列,它將始終是數組中的第一個索引。

someCustomer.Name = splitResult[0]; 

依此類推。您還需要調查String.TryParse以瞭解您班級的數字類型屬性。

3

string.Split結果會給你一個字符串數組:

string[] lineValues = line.Split(','); 

您可以通過索引訪問數組中的值:

string name = lineValues[0]; 
string city = lineValues[1]; 

可以使用字符串轉換爲doubleint他們分別爲Parse方法:

double balance = double.Parse(lineValues[2]); 
int cardNumber = int.Parse(lineValues[3]); 

可以實例類,並給它分配得很乾脆:

Customer customerForCurrentLine = new Customer() 
{ 
    Name = name, 
    City = city, 
    Balance = balance, 
    CardNumber = cardNumber, 
}; 

簡單地遍歷所有的行,實例化該行一Customer,並將其添加到您所創建的類型的變量List<Customer>

如果你想要你的程序是防彈的,你將不得不做很多檢查來跳過沒有足夠值的行,否則將無法解析到正確的數字類型。例如,請檢查lineValues.Length == 4並使用int.TryParse(...)double.TryParse(...)

相關問題