跳過到頁腳內容
使用 IRONXL

使用 IronXL 讀取帶有逗號的 CSV 數據

CSV 檔案看起來很簡單,但當你的資料中包含逗號時,問題就出現了。 突然間,"史密斯,約翰"變成了兩個獨立的字段,地址以逗號分隔,你精心構建的數據變成了混亂。 雖然基本的 String.Split(',') 方法在處理真實世界的 CSV 資料時會完全失敗,但 IronXL 提供了一個強大的解決方案,可以自動處理這些複雜性。

!{--01001100010010010100001001010010010000010101001001011001010111110100011101000101010101 01000101111101010011010101000100000101010010010101000100010101000100010111110101011101001000110 1010101000100100001011111010100000101001001001111010001000101010101010000110101010100101010101011 10101010001010010010010010010000010100110001011111010000100100110001001111101000011010010111111010000110100101110--

為什麼逗號會導致 CSV 檔案解析失敗?

CSV(逗號分隔值)檔案使用逗號作為列值之間的字元分隔符,當資料本身包含逗號時,就會產生固有的衝突。 RFC 4180 標準透過要求將包含逗號的欄位用雙引號括起來來解決這個問題。 如果處理不當,像"紐約大街 123 號 400 室"這樣的簡單地址會被分成三個單獨的字段,而不是保持為一個字段。

傳統的 CSV 檔案解析方法之所以失敗,是因為它們無法辨識帶有引號的儲存格或字串值中的逗號上下文。 對字串行套用基本分割方法無法辨識引號,導致表格資料損壞和資料結構無效。 這個問題會影響無數的商業場景:客戶地址、產品描述和 Excel 匯入。 即使是微軟的官方文件也承認,解析包含特殊字元的 CSV 檔案非常複雜。

IronXL 如何處理包含嵌入式逗號的 CSV 檔案?

IronXL 允許在載入分隔符檔案時指定檔案編碼和分隔符,從而處理 CSV 資料中的特殊字符,確保資料的完整性和準確性。 該函式庫能夠根據 RFC 4180 標準自動偵測並正確解析帶引號的字串值,從而無需自訂 while 迴圈邏輯或手動解析程式碼。

透過 NuGet 套件管理器安裝 IronXL 只需幾秒鐘:

Install-Package IronXL.Excel

安裝完成後,讀取具有嵌入式逗號的 CSV 檔案只需要幾行程式碼:

using IronXL;
// Load CSV with automatic comma handling
WorkBook workbook = WorkBook.LoadCSV("data.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");
// Access the parsed data
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Save as Excel if needed
workbook.SaveAs("output.xlsx");
using IronXL;
// Load CSV with automatic comma handling
WorkBook workbook = WorkBook.LoadCSV("data.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");
// Access the parsed data
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Save as Excel if needed
workbook.SaveAs("output.xlsx");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

LoadCSV方法能夠智慧地處理引號和 CSV 字串,確保每一列的值都保持不變,無論其中是否包含逗號。 有關使用 CSV 文件的更多詳細信息,請參閱 IronXL 官方 CSV 解析文件

輸出

如您所見,這是我們的 CSV 格式與輸出 Excel 檔案的比較。

使用 IronXL 讀取帶有逗號的 CSV 資料:圖 1 - 原始 CSV 檔案(左)與輸出的 Excel 檔案(右)

使用 IronXL 解析 CSV 文件

讓我們來看一個完整的範例,該範例示範了 IronXL 在讀取包含逗號的 CSV 資料時如何處理逗號分隔值:

using IronXL;
using System;
class CsvParser
{
    static void Main()
    {
        // Create sample CSV content with embedded commas
        string csvContent = @"Name,Address,Description,Price
""Johnson, Mark"",""123 Main St, Apt 4B"",""High-quality, durable product"",""1,234.56""
""Smith Ltd."",""789 Corporate Blvd, Suite 200"",""Professional, reliable service"",""2,999.00""";
        // Save sample to file
        System.IO.File.WriteAllText("sample.csv", csvContent);
        // Load CSV with IronXL
        WorkBook workbook = WorkBook.LoadCSV("sample.csv",
            fileFormat: ExcelFileFormat.XLSX,
            listDelimiter: ",");
        WorkSheet ws = workbook.DefaultWorkSheet;
        // Read and display parsed data
        foreach (var row in ws.Rows)
        {
            if (row.RowNumber == 0) continue; // Skip header
            string name = row.Columns[0].StringValue;
            string address = row.Columns[1].StringValue;
            string description = row.Columns[2].StringValue;
            decimal price = row.Columns[3].DecimalValue;
            Console.WriteLine($"Customer: {name}");
            Console.WriteLine($"Address: {address}");
            Console.WriteLine($"Product: {description}");
            Console.WriteLine($"Price: ${price:N2}\n");
        }
        // Export to Excel format
        workbook.SaveAs("parsed_data.xlsx");
    }
}
using IronXL;
using System;
class CsvParser
{
    static void Main()
    {
        // Create sample CSV content with embedded commas
        string csvContent = @"Name,Address,Description,Price
""Johnson, Mark"",""123 Main St, Apt 4B"",""High-quality, durable product"",""1,234.56""
""Smith Ltd."",""789 Corporate Blvd, Suite 200"",""Professional, reliable service"",""2,999.00""";
        // Save sample to file
        System.IO.File.WriteAllText("sample.csv", csvContent);
        // Load CSV with IronXL
        WorkBook workbook = WorkBook.LoadCSV("sample.csv",
            fileFormat: ExcelFileFormat.XLSX,
            listDelimiter: ",");
        WorkSheet ws = workbook.DefaultWorkSheet;
        // Read and display parsed data
        foreach (var row in ws.Rows)
        {
            if (row.RowNumber == 0) continue; // Skip header
            string name = row.Columns[0].StringValue;
            string address = row.Columns[1].StringValue;
            string description = row.Columns[2].StringValue;
            decimal price = row.Columns[3].DecimalValue;
            Console.WriteLine($"Customer: {name}");
            Console.WriteLine($"Address: {address}");
            Console.WriteLine($"Product: {description}");
            Console.WriteLine($"Price: ${price:N2}\n");
        }
        // Export to Excel format
        workbook.SaveAs("parsed_data.xlsx");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

以上程式碼示範了幾個關鍵功能,並解釋了 CSV(逗號分隔值)的含義:

*自動引用處理:*即使 CSV 資料中包含逗號,"Johnson, Mark"等欄位也能保持其完整性。 嵌套引號:** IronXL 使用來源字串的拆分和解析邏輯,正確地解釋 CSV 行中的雙引號。 *類型轉換: StringValue 和 DecimalValue 等類型化存取器簡化了對資料結構中各個值的存取。

立即下載 IronXL ,徹底改變您在 C# 中處理帶有嵌入式逗號的 CSV 檔案的方式。

使用 IronXL 讀取帶有逗號的 CSV 資料:圖 2 - 範例 CSV 檔案(左)與解析後的 Excel 輸出(右)對比

IronXL 支援哪些進階 CSV 功能?

除了對 CSV 檔案中的基本逗號處理之外,IronXL 還提供全面的 CSV 處理功能。 當您需要使用不同的配置讀取包含逗號的 CSV 資料時,該程式庫提供了靈活的選項,如下面的程式碼範例所示:

// Custom delimiter support for CSV parsing in C#
WorkBook workbook = WorkBook.LoadCSV("data.txt",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ";");  // Semicolon-delimited
// Handle different encodings when reading CSV files
var csvWithEncoding = WorkBook.LoadCSV("international.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",",
    encoding: System.Text.Encoding.UTF8);
// Error handling for CSV with comma in data
try
{
    var data = WorkBook.LoadCSV("file.csv");
    // Process data
}
catch (Exception ex)
{
    Console.WriteLine($"CSV parsing error: {ex.Message}");
    // Implement appropriate error recovery
}
// Custom delimiter support for CSV parsing in C#
WorkBook workbook = WorkBook.LoadCSV("data.txt",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ";");  // Semicolon-delimited
// Handle different encodings when reading CSV files
var csvWithEncoding = WorkBook.LoadCSV("international.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",",
    encoding: System.Text.Encoding.UTF8);
// Error handling for CSV with comma in data
try
{
    var data = WorkBook.LoadCSV("file.csv");
    // Process data
}
catch (Exception ex)
{
    Console.WriteLine($"CSV parsing error: {ex.Message}");
    // Implement appropriate error recovery
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronXL 提供企業級功能,例如密碼保護的檔案處理、儲存格樣式保留和公式計算。 本函式庫支援各種分隔符號(豎線、製表符、分號),可處理多種字元編碼,並能有效率地處理任意大小的文件,而無需一次將所有內容載入到記憶體中。 對於複雜的資料場景,請探索資料操作功能

為什麼選擇 IronXL 進行 CSV 處理?

IronXL 可獨立運行,無需依賴 Microsoft Office,因此非常適合伺服器部署和雲端應用程式。 與需要 Office Interop 的解決方案不同,IronXL 可在 Windows、Linux 和 macOS 上執行,支援.NET Framework 4.6.2+ 和 .NET Core/5/6/7/8+

該函式庫透過智慧處理一些會導致簡單解析器崩潰的極端情況,消除了常見的 CSV 解析陷阱。 無論是處理具有貨幣格式的財務報告、帶有國際字元的客戶數據,還是帶有特殊字元的系統日誌,當您閱讀帶有逗號的 CSV 資料時,IronXL 都能在整個解析過程中保持資料完整性。

對於生產環境,IronXL 提供企業應用程式所需的可靠性和支援結構,並有專業支援和持續更新作為後盾。 根據Stack Overflow 上的討論,處理 CSV 欄位中的逗號是一個常見的挑戰,而 IronXL 可以優雅地解決這個問題。

結論

在 C# 中讀取具有嵌入式逗號的 CSV 檔案並不複雜。 IronXL 將這種複雜的 csv 格式挑戰轉化為簡潔可靠的程式碼。 透過自動處理雙引號、逗號和帶引號的單元格,它可以讓開發人員專注於邏輯而不是 CSV 解析細節。

總而言之,這篇文章展示了讀取、解析和處理逗號分隔值是多麼容易,同時也能保持各個值不變。 答案很明確:IronXL 簡化了 CSV 解析,同時支援所有常見的分隔符號、資料和格式變體。

準備好告別 CSV 解析的煩惱了嗎? 您可以先使用免費試用版在您的環境中測試 IronXL,或購買授權進行生產部署。 加入數千名使用 IronXL 簡化 CSV 處理的開發者行列。

常見問題解答

在 C# 中讀取 CSV 檔案時,如何處理資料中的逗號?

IronXL 提供了一個強大的解決方案,用於讀取包含逗號的 CSV 檔案。它可以自動處理帶有引號的字段和特殊字符,確保您的資料不會因逗號而被分割。

為什麼 String.Split(',') 在處理包含逗號的 CSV 檔案時會失敗?

`String.Split(',')` 方法會將每個逗號視為分隔符,這在資料欄位本身包含逗號時會造成問題。 IronXL 透過智慧解析 CSV 檔案、識別帶引號的欄位並維護資料完整性來解決這個問題。

在 C# 中使用 IronXL 進行 CSV 解析有什麼優點?

IronXL 透過自動處理嵌入逗號和帶引號的欄位等複雜情況,簡化了解析 CSV 檔案的過程,從而節省了開發人員的時間並減少了資料處理中可能出現的錯誤。

IronXL 能否處理 CSV 檔案中的其他特殊字元?

是的,IronXL 旨在管理特殊字元和帶引號的字段,確保即使是最複雜的 CSV 檔案也能準確解析。

IronXL 是否適用於大型 CSV 檔案?

IronXL 能夠高效處理大型 CSV 文件,憑藉其優化的解析功能,可以快速準確地處理這些文件。

Jordi Bardia
軟體工程師
Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担产品测测试,产品开发和研究的责任时,Jordi 为持续的产品改进增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。