Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以逗号分隔的文本文件到通用列表_C#_List_Generics_Comma - Fatal编程技术网

C# 以逗号分隔的文本文件到通用列表

C# 以逗号分隔的文本文件到通用列表,c#,list,generics,comma,C#,List,Generics,Comma,在将逗号分隔的文本文件转换为通用列表时遇到一些问题。我使用以下属性定义了一个名为Customers的类: 名称字符串 城市线 双倍余额 卡号整数 这些值将以以下格式存储在文本文件中:姓名、城市、余额、卡号,例如约翰、孟菲斯、10200789。这将有多行。我想做的是,当用户单击按钮时,将每一行放在一个列表项中 我已经计算出可以使用.Split方法将每一行拆分,但是不知道如何将正确的值放入列表的正确属性中。请注意:我知道如何使用get/set属性,不允许使用LINQ来解决此问题 感谢您的帮助,因为我

在将逗号分隔的文本文件转换为通用列表时遇到一些问题。我使用以下属性定义了一个名为Customers的类:

名称字符串 城市线 双倍余额 卡号整数 这些值将以以下格式存储在文本文件中:姓名、城市、余额、卡号,例如约翰、孟菲斯、10200789。这将有多行。我想做的是,当用户单击按钮时,将每一行放在一个列表项中


我已经计算出可以使用.Split方法将每一行拆分,但是不知道如何将正确的值放入列表的正确属性中。请注意:我知道如何使用get/set属性,不允许使用LINQ来解决此问题

感谢您的帮助,因为我只是在学习,并且已经为此工作了一段时间,但运气不佳。谢谢

编辑: 对不起,我好像没说清楚。我知道如何使用。添加。 如果文本文件中有两行: A、 B、1、2和 C、 D,3,4 我不知道如何做的是使列表项中位置0的name字段等于A,而位置1的name字段等于C,依此类推


很抱歉术语使用不当,我只是在学习。希望您理解我的要求。我确信,一旦您知道读入一个文件并根据换行符拆分其文本,就很容易做到这一点。然后,对于总行数,运行一个循环,该循环将基于逗号拆分,并创建一个新对象,在其属性中插入值,然后将该对象添加到列表中

这边

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

读取文件并根据换行符拆分其文本。然后,对于总行数,运行一个循环,该循环将基于逗号拆分,并创建一个新对象,在其属性中插入值,然后将该对象添加到列表中

这边

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

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

someCustomer.Name = splitResult[0];

等等。您还需要研究类的数字类型属性String.TryParse

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

someCustomer.Name = splitResult[0];
等等。您还需要研究类的数字类型属性String.TryParse

string.Split的结果将为您提供一个字符串数组:

string[] lineValues = line.Split(',');
您可以通过索引访问数组中的值:

string name = lineValues[0];
string city = lineValues[1];
您可以使用字符串各自的解析方法将字符串转换为double或int:

您可以实例化该类并非常简单地为其赋值:

Customer customerForCurrentLine = new Customer()
{
    Name = name,
    City = city,
    Balance = balance,
    CardNumber = cardNumber,
};
只需在这些行上循环,为该行实例化一个客户,并将其添加到您创建的类型列表变量中

如果你想让你的程序是防弹的,你需要做大量的检查来跳过那些没有足够值的行,或者那些无法解析为正确的数字类型的行。例如,检查lineValues.Length==4并使用int.TryParse。。。和double.TryParse….

string.Split的结果将为您提供一个字符串数组:

string[] lineValues = line.Split(',');
您可以通过索引访问数组中的值:

string name = lineValues[0];
string city = lineValues[1];
您可以使用字符串各自的解析方法将字符串转换为double或int:

您可以实例化该类并非常简单地为其赋值:

Customer customerForCurrentLine = new Customer()
{
    Name = name,
    City = city,
    Balance = balance,
    CardNumber = cardNumber,
};
只需在这些行上循环,为该行实例化一个客户,并将其添加到您创建的类型列表变量中


如果你想让你的程序是防弹的,你需要做大量的检查来跳过那些没有足够值的行,或者那些无法解析为正确的数字类型的行。例如,检查lineValues.Length==4并使用int.TryParse。。。和double.TryParse…

但不知道如何使用=?readline-foreach-new object-list.Add将正确的值放入列表的正确属性中,但不知道如何使用=?readline-foreach-new object-list.Add将正确的值放入列表的正确属性中。ReadAllText.Split使用了太多内存,缓慢的一次读取一行。ReadAllText.Split占用太多内存,速度太慢。一次读一行。