下面有一些代码,我在这些文件中读取文件,然后在控制台应用程序上将其写出,然后将其写入对值进行重新排序的同一文件中。我当前的问题是添加一个新列(第4列),并将重新排序的数据写入该新列,同时将旧数据保留为原始格式。
如果有任何后果,我将在Excel中打开CSV。
我已经尝试过这些StackOverflow和ASP论坛网站的问题的答案,但是我想这里的主要问题是代码的位置。
c# Add a Column to end of CSV file
https://forums.asp.net/t/1979251.aspx?Add+new+column+in+existing+CSV+file+using+C+
var runProg = true;
var filePath = @"C:\csharp\CSVFile.csv";
List<Contact> contacts = new List<Contact>();
var csv = File.ReadAllLines(filePath).ToList();
File.WriteAllLines(filePath, csv);
while (runProg)
{
foreach (var line in csv)
{
var entries = line.Split(',');
Contact newContact = new Contact();
newContact.FirstName = entries[0];
newContact.LastName = entries[1];
newContact.EmailAddress = entries[2];
if (entries.Length != (3))
{
throw new Exception("Invalid number of items in list.");
}
contacts.Add(newContact);
}
Console.WriteLine("Read from CSV file.");
foreach (var contact in contacts)
{
Console.WriteLine($"{contact.FirstName}-{contact.LastName}-{contact.EmailAddress}");
}
List<string> output = new List<string>();
foreach (var contact in contacts)
{
output.Add($"{contact.FirstName}-{contact.EmailAddress}-{contact.LastName}");
}
Console.WriteLine("Writing to CSV file.");
File.WriteAllLines(filePath, output);
Console.WriteLine("All entries written...Q program?");
var loop = Console.ReadLine();
if (loop == "Q")
{
runProg = false;
}
我需要插入代码,使我可以创建新列以将重新排序的数据写入其中。 当我尝试添加测试代码时,抛出的主要异常是System.IndexOutOfRangeException:索引超出了数组的范围。 不知道如何扩展它(如果可能的话)。
答案 0 :(得分:1)
第一次读取文件时,您要用逗号“,”分割每一行,但随后您将破折号“-”用作分隔符来重写所有行。因此,下一次您尝试读入文件并再次尝试以逗号分割时,由于不存在逗号,它将仅返回长度为1(一个)的数组,然后为“ newContact”设置值的行”将给出指示的异常。
更改:
output.Add($"{contact.FirstName}-{contact.EmailAddress}-{contact.LastName}");
收件人:
output.Add($"{contact.FirstName},{contact.EmailAddress},{contact.LastName}");
但是,您已经切换了姓氏和电子邮件地址的顺序,因此在后续读取中,这些值将被填充到错误的实例字段中。
您可以通过简单地更改output.Add()
行并用逗号分隔所有列来添加更多列。
最后的注释...将if (entries.Length != (3))
行移至Split()
调用之后,然后之前,尝试使用硬编码索引访问数组。