首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

CsvReader 多重載建構函數參數詳解:分隔符、引號、逸出、註解、緩衝區一次看懂

     編輯:程式設計綜合問答

LumenWorks CsvReader 提供 7 個建構函數重載,參數組合靈活但文檔分散。本文將所有重載參數彙整為對照表,並以實際場景說明何時使用哪個重載,助你快速選擇正確簽名。

七大重載完整對照表

簽名參數說明適用場景
CsvReader(TextReader reader, bool hasHeaders) reader:輸入來源
hasHeaders:第一列是否為標題
標準 RFC 4180 CSV,逗號分隔、雙引號包裹、含標題列
CsvReader(TextReader reader, bool hasHeaders, char delimiter) 增加 delimiter:欄位分隔字元 TSV(Tab 分隔)、分號分隔、管線分隔等非標準 CSV
CsvReader(TextReader reader, bool hasHeaders, int bufferSize) 增加 bufferSize:內部緩衝區大小(位元組) 大檔案(>100MB)效能調優,預設 4096 可能過小
CsvReader(TextReader reader, bool hasHeaders, char delimiter, int bufferSize) 同時指定分隔符與緩衝區 大檔案 + 非標準分隔符
CsvReader(TextReader reader, bool hasHeaders, char delimiter, char quote, char escape, char comment, ValueTrimmingOptions trimmingOptions) quote:引號字元(預設 '\"')
escape:逸出字元(預設 '\"',雙重引號逸出)
comment:註解起始字元(預設 '#',行首出現則忽略整行)
trimmingOptions:欄位值修剪策略
非標準引號(如單引號)、自訂逸出規則、需忽略註解行、控制空白修剪
CsvReader(TextReader reader, bool hasHeaders, char delimiter, char quote, char escape, char comment, ValueTrimmingOptions trimmingOptions, int bufferSize) 完整參數組合 最複雜場景:大檔案 + 全自訂格式

參數深度解析

1. hasHeaders (bool)

  • true:第一列視為標題,GetFieldHeaders() 可取得欄位名,ReadNextRecord() 從第二列開始。
  • false:無標題,欄位索引從 0 起算,GetFieldHeaders() 回傳 null。

2. delimiter (char)

  • 常見值:',' (CSV)、'\t' (TSV)、';' (歐洲 CSV)、'|' (管線分隔)。
  • 若資料中包含分隔符,必須搭配 quote 包裹。

3. quote / escape (char)

  • 預設雙引號 '\"' 同時作為引號與逸出(雙重逸出:"" 代表一個引號)。
  • 若來源使用單引號包裹、反斜線逸出,可分別傳入 '\''、'\\'。

4. comment (char)

  • 行首出現該字元視為註解,整行跳過。預設 '#'。
  • 若檔案無註解行,可傳入 '\0' 或不支援註解的重載。

5. ValueTrimmingOptions (enum)

值行為
None保留前後空白
Trim去除前後空白(預設)
UnquotedOnly僅修剪未被引號包裹的欄位

6. bufferSize (int)

  • 單位:位元組。預設 4096 (4KB)。
  • 大檔案建議 65536 (64KB) 或 131072 (128KB),減少系統呼叫次數。
  • 過大可能增加記憶體壓力,建議實測調整。

場景化選擇指南

  1. 標準 CSV、小檔案:new CsvReader(reader, true)
  2. TSV 檔案:new CsvReader(reader, true, '\t')
  3. 大檔案 (GB 級):new CsvReader(reader, true, ',', 131072)
  4. 舊系統匯出:單引號包裹、反斜線逸出、含註解行:
    new CsvReader(reader, true, ',', '\'', '\\', '#', ValueTrimmingOptions.Trim, 65536)

快速驗證技巧

// 列印前 3 列原始欄位,確認解析正確
for (int i = 0; i < 3 && csv.ReadNextRecord(); i++) {
    for (int j = 0; j < csv.FieldCount; j++) {
        Console.WriteLine($"[{j}] = '{csv[j]}'");
    }
    Console.WriteLine("---");
}

總結

掌握 CsvReader 七大重載的參數語意,關鍵在於識別「分隔符、引號/逸出規則、註解、修剪策略、緩衝區」五大變數。依實際檔案格式由簡入繁選擇重載,並在正式匯入前用前 3 列驗證,即可避免 90% 的解析錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved