這幾天工作要讀寫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...