2012-09-15 236 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(...)

相关问题