2016.10.31
有關正規表示式我進行了修改,完整示例如下:
string s = string正規表示式的效果如下:.empty;
string src = string
.empty;
streamreader fs = new streamreader(new filestream("
d:\\demo.csv
", filemode.open, fileaccess.read), encoding.getencoding("
gb2312
"));
while (!string.isnullorempty(s =fs.readline()))
}console.read();
}fs.close();
在小批量資料匯入的時候,最常用的就是使用excel工具,將資料儲存為xls或csv檔案,然後上傳到伺服器,然後讀取出來通過資料庫訪問類的相關方法更新到資料庫中。對於如何讀取xls檔案的方法,網上太多了,使用excel物件或ole db/odbc連線都行。對於csv檔案,其中有一種方式就是通過檔案流,將它作為文字讀取出來,這其中會遇到一點小意外。
我們知道,使用excel工具儲存成csv檔案時有幾個規則:
1、每一行的單元格內容之間用逗號分隔。
2、如果單元格的內容本身有逗號,這個單元格的內容將會用引號包含。
3、如果單元格的內容本身有引號,
引號不在首或尾,這個單元格內容不會被引號包含。
引號在首或尾,這個單元格內容會被引號包含且原來首尾的引號會被轉義。
所以對於這樣的內容,直接按逗號或引號使用split方法明顯不合適,需要預先處理一下。辦法很多,最容易想到的就是用正則過濾掉本身帶逗號或引號的內容,剩下的再按逗號split就方便了,我將csv檔案中的每一行獲取出來存放到乙個鍵值對的集合中,為了保證前後順序一致,使用sortedlist,這裡用控制台程式示例一下:
1strings =
string
.empty;
2string
src
=string
.empty;
3sortedlist sl
=new
sortedlist();
4streamreader fs
=new
streamreader(
newfilestream(
"demo
.csv
", filemode.open, fileaccess.read), encoding.getencoding(
"gb2312
"));
5while(!
string
.isnullorempty(s
=fs.readline()))
6).replace("'
", "\
""));
20src
=src.replace(patn, ",,
");21}
22}2324
string
arr
=src.split(',
');25for
(inti =
0; i
<
arr.length; i++)
2630
31idictionaryenumerator ienum
=sl.getenumerator();
32while
(ienum.movenext())33:
", ienum.key, ienum.value.tostring().replace("'
", "\
"")));35}
36sl.clear();
37src
=string
.empty;38}
39console.read();40}
41fs.close();
讀取csv檔案時,發現內容文字中也帶有逗號?!
近日參加2019中國高校計算機大賽大資料挑戰賽時,在讀取檔案時就吃了虧。發現文字資料中也有逗號,導致讀取內容亂七八糟。後經思考找到解決方案 由於原資料文字中包含逗號,會導致在讀取資料時發生錯誤,將原本屬於text的誤進行分割。可以在excel中查詢所有的逗號,然後替換成其他符號。附 panda刪除空...
C 對INI檔案讀寫,以及CSV
using system using system.collections.generic using system.linq using system.runtime.interopservices using system.text namespace msframework.common se...
C語言檔案操作 獲取檔案內容
在 c premier plus 中看到乙個文字處理程式,寫的非常精妙,分析一下 include include 要求在命令列中執行程式,並附帶檔名作為引數 int main int argc,char ar if fp fopen ar 1 r null while ch getc fp eof ...