[英]Wondering how to add a new column to a CSV file with existing code (C#)
我下面顯示了一些代碼,這些代碼是我從文件中讀取,在控制台應用程序上將其寫出,然后將其寫入對值進行重新排序的同一文件中的。 我當前的問題是添加一個新列(第4列),並將重新排序的數據寫入該新列,同時將舊數據保留為原始格式。
如果有任何后果,我將在Excel中打開CSV。
我已經嘗試過這些StackOverflow和ASP論壇網站問題中的答案,但是我想這里的主要問題是代碼的位置。
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:索引超出了數組的范圍。 不知道如何擴展它(如果可能的話)。
第一次讀取文件時,您是在逗號“,”上分割每一行,但隨后您使用破折號“-”作為分隔符來重寫所有行。 因此,下一次您嘗試讀入文件並再次嘗試以逗號分割時,由於不存在逗號,它將僅返回長度為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()
調用之后, 然后再嘗試使用硬編碼索引訪問數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.