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