簡體   English   中英

想知道如何使用現有代碼(C#)將新列添加到CSV文件

[英]Wondering how to add a new column to a CSV file with existing code (C#)

我下面顯示了一些代碼,這些代碼是我從文件中讀取,在控制台應用程序上將其寫出,然后將其寫入對值進行重新排序的同一文件中的。 我當前的問題是添加一個新列(第4列),並將重新排序的數據寫入該新列,同時將舊數據保留為原始格式。

如果有任何后果,我將在Excel中打開CSV。

我已經嘗試過這些StackOverflow和ASP論壇網站問題中的答案,但是我想這里的主要問題是代碼的位置。

c#在CSV文件的末尾添加一列

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM