相容標準的CSV檔案讀寫類

2021-09-08 02:15:19 字數 1752 閱讀 2009

這幾天工作要讀寫csv檔案,csv格式雖然很簡單,為省事想先從網上找乙個現成的,但找了半天只有乙個看上去可以,至少讀寫都支援,在此基礎上,按照標準修正了一下,標準才是王道。

1 開頭是不留空,以行為單位。

2 可含或不含列名,含列名則居檔案第一行。

3 一行資料不垮行,無空行。

4 以半形逗號(即,)作分隔符,列為空也要表達其存在。

5 列內容如存在半形逗號(即,)則用半形引號(即"")將該字段值包含起來。

6 列內容如存在半形引號(即")則應替換成半形雙引號("")轉義。

7 檔案讀寫時引號,逗號操作規則互逆。

8 內碼格式不限,可為ascii、unicode或者其他。

9 不支援特殊字元和中文。

網上看到的,都滿足前4條,5和6基本都沒考慮,應該只是為處理自己手頭工作需要而用。其實只繼續努力一下,讓它變成通用的,再共享出來就有價值的多。

此類可以讀檔案或流的資料,返回datatable。也可以將datatable處理後儲存成csv檔案。

public class 

csvhelper

public csvhelper(string csvfile)

public string csvfile

public

datatable read(stream stream)

public

datatable read()

private

datatable read(textreader reader)

else

linenumber++;}}

finally

return dt;

}public void write(datatable dt)

public void write(datatable dt, string filename)

}public string writestring(datatable dt)

foreach (datarow dr in dt.rows)

}return sb.tostring();

}/// ///

init datatable's colomns

///

///

///

private

datatable createdatatable(string line)

return dt;

}private bool createdatarow(datatable dt, string line)

dr[i] = text;

}if (add) dt.rows.add(dr);

return add;

}private string readfield(ref int startindex, string line)

text = line.substring(startindex, endindex - startindex);

startindex = endindex + 2;

}else

if (text.contains("\"\"")) text = text.replace("\"\"", "\"");

return text;

}}

處理邊界條件,如行尾時,要特別小心。既要保證功能正確,又要確保一定的健壯性和容錯性。

這是個不依賴狀態的類,也就是其中大部分方法都可以轉換為靜態方法,看你心情了。希望下次有人像我一樣偷懶時,能幸運地google到這篇。

CSV檔案讀寫

delimiter 分隔符 quotechar 如果某個item中包含了分隔符,用quotechar包裹 doublequote quotechar double 一下用來做區分 escapechar 如果不用 doublequote 的方法還可以用 escapechar 來輔助 linetermi...

CSV 檔案讀寫

乙個臨時的任務,需要把乙個有幾百萬條記錄的 csv 檔案分割成多個小一點的檔案,沒找到合適的分割工具,就花了一點時間研究了 csv 檔案的讀寫操作。成果如下 public static arraylistreadcsvbycsvreader string filepath reader.close ...

C 自定義標準 讀寫CSV檔案

csv檔案格式標準 編碼方式 utf 8 行分割符為換行符 r n 列分割符為英文逗號 內容行 第一行為標題行 即列名 約定特殊字元處理標準 資料來源文字 目標文字 英文逗號 英文逗號 出現左側一種或多中情況時,在文字兩側加上英文冒號 英文冒號 替換成兩個英文冒號 換行符 n 換行符 n 回車符 r...