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) |
完整參數組合 | 最複雜場景:大檔案 + 全自訂格式 |
true:第一列視為標題,GetFieldHeaders() 可取得欄位名,ReadNextRecord() 從第二列開始。false:無標題,欄位索引從 0 起算,GetFieldHeaders() 回傳 null。',' (CSV)、'\t' (TSV)、';' (歐洲 CSV)、'|' (管線分隔)。quote 包裹。'\"' 同時作為引號與逸出(雙重逸出:"" 代表一個引號)。'\''、'\\'。'#'。'\0' 或不支援註解的重載。| 值 | 行為 |
|---|---|
None | 保留前後空白 |
Trim | 去除前後空白(預設) |
UnquotedOnly | 僅修剪未被引號包裹的欄位 |
new CsvReader(reader, true)new CsvReader(reader, true, '\t')new CsvReader(reader, true, ',', 131072)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% 的解析錯誤。