2

将逗号分隔的文本文件转换为通用列表有点麻烦。我有一个使用以下属性定义的类(称为“客户”):

  • 名称(字符串)
  • 城市(字符串)
  • 余额(双)
  • 卡号(整数)

这些值将以这种格式存储在文本文件中:姓名、城市、余额、车号,例如 John,Memphis,10,200789。会有多行这样的。我想要做的是在用户单击按钮时将每一行放在一个列表项中。

我已经弄清楚我可以使用 .Split() 方法分解每条线,但不知道如何将正确的值放入列表的正确属性中。(请注意:我知道如何使用 get/set 属性,我不允许使用 LINQ 来解决问题)。

任何帮助表示赞赏,因为我只是在学习并且已经为此工作了一段时间,但没有运气。谢谢

编辑:
对不起,看来我没有说清楚。我知道如何使用 .add。如果我在文本文件中有两行:A、B、1、2 和 C、D、3、4 我不知道该怎么做是使位置 0 的列表项中的名称“字段”等于“ A”,位置 1 的项目中的名称“字段”等于“C”,依此类推。

抱歉,术语使用不当,我只是在学习。希望你明白我在问什么(我相信一旦你知道这真的很容易做到)

4

3 回答 3

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,
};

只需遍历这些行,为该行实例化 a Customer,并将其添加到您创建的类型的变量中List<Customer>

如果您希望您的程序是防弹的,您将不得不进行大量检查以跳过没有足够值的行,或者无法解析为正确的数字类型。例如,检查lineValues.Length == 4并使用int.TryParse(...)and double.TryParse(...)

于 2012-09-15T06:13:14.583 回答
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);
}

顺便说一句,类名应该是Customer而不是Customers

于 2012-09-15T06:08:37.940 回答
0

Split() 按照它们在源字符串中出现的顺序生成一个字符串数组。因此,如果您的名称字段是 CSV 文件中的第一列,那么它将始终是数组中的第一个索引。

someCustomer.Name = splitResult[0];

等等。您还需要调查 String.TryParse 以了解您的类的数字类型属性。

于 2012-09-15T06:11:03.570 回答