首頁 >後端開發 >C++ >如何在 C# 中將 CSV 列分成單獨的陣列?

如何在 C# 中將 CSV 列分成單獨的陣列?

Patricia Arquette
Patricia Arquette原創
2025-01-26 06:46:09440瀏覽

此 C# 程式碼有效地將 CSV 欄位分成單獨的陣列。讓我們對其進行改進,使其更加清晰和穩健。

How Can I Separate CSV Columns into Individual Arrays in C#?

改進了 CSV 欄位分隔的 C# 程式碼:

此版本處理潛在的錯誤,例如缺失值或不正確的分隔符,並允許可變數量的列:

<code class="language-csharp">using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

public class CsvSplitter
{
    public static List<List<string>> SeparateCsvColumns(string filePath, char delimiter = ';')
    {
        List<List<string>> columns = new List<List<string>>();

        try
        {
            using (var reader = new StreamReader(filePath))
            {
                string line;
                bool firstLine = true;

                while ((line = reader.ReadLine()) != null)
                {
                    string[] values = line.Split(delimiter);

                    if (firstLine)
                    {
                        // Initialize lists for each column on the first line
                        for (int i = 0; i < values.Length; i++)
                        {
                            columns.Add(new List<string>());
                        }
                        firstLine = false;
                    }

                    // Add values to corresponding columns.  Handles lines with fewer values than the header.
                    for (int i = 0; i < Math.Min(values.Length, columns.Count); i++)
                    {
                        columns[i].Add(values[i].Trim()); //Trim whitespace
                    }
                }
            }
        }
        catch (FileNotFoundException)
        {
            Console.WriteLine($"Error: File not found at {filePath}");
            return null; // Or throw a more specific exception
        }
        catch (Exception ex)
        {
            Console.WriteLine($"An error occurred: {ex.Message}");
            return null; // Or throw a more specific exception
        }

        return columns;
    }

    public static void Main(string[] args)
    {
        string filePath = @"C:\test.csv"; //Replace with your file path
        List<List<string>> separatedColumns = SeparateCsvColumns(filePath);

        if (separatedColumns != null)
        {
            for (int i = 0; i < separatedColumns.Count; i++)
            {
                Console.WriteLine($"Column {i + 1}:");
                foreach (string value in separatedColumns[i])
                {
                    Console.WriteLine(value);
                }
                Console.WriteLine();
            }
        }
    }
}</code>

改進後的程式碼:

  • 處理多列:它根據第一行動態為每列建立清單。
  • 錯誤處理: 包括 try-catch 區塊來處理 FileNotFoundException 和其他潛在的異常。
  • 空格修剪: 使用 Trim() 刪除每個值的前導/尾隨空格。
  • 處理不一致的行長度: 優雅地處理某些行的值少於其他行的 CSV 檔案。
  • 更清晰的輸出:以更有組織性和可讀性的格式呈現輸出。
  • 使用分隔符號參數: 如果分隔符號不是分號,則允許您指定分隔符號(例如「,」、「;」、「|」)。

請記得將 "C:test.csv" 替換為 CSV 檔案的實際路徑。 這個強大的解決方案提供了一種更可靠、更通用的方法來在 C# 中處理 CSV 資料。

以上是如何在 C# 中將 CSV 列分成單獨的陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn