將文本信息可以通過awk腳本命令
輸出成
a,b,c,d的形式,並且寫入的文件名字保存為a.csv即可變成csv格式的文件了,一般通過腳本實現。
2. 如何讀取csv文件的內容
第一種方式: 先入庫後使用
我們假設現在有有一個CSV文件Contacts.CSV 文件的內容是聯系人信息。首先我們需要在資料庫中建一個對應的表TC_Contacts,然後利用下面的SQL代碼將CSV文件導入到這個表裡面:
INSERT INTO TC_Contacts
2
3 SELECT * FROM
4 OPENROWSET('MSDASQL',
5 'Driver={Microsoft Text Driver (*.txt; *.csv)};
6 DEFAULTDIR=D:/Data;Extensions=CSV;',
7 'SELECT * FROM "Contacts.CSV"')
其中:1.TC_Contacts為目標表的名字。
對於目標表,要求對應的欄位能夠接收CSV文件中對象列的數據,這里特別需要注意的是字元串的長度,日期時間格式和整數浮點數的處理;由於CSV文件中實際上都是字元串,那麼在導入的過程中就有可能出現不能轉換的情況。例如:日期格式不符合資料庫的要求,或者字元串不能轉化為整數或者浮點數等。
對於目標表,欄位數目和順序可以和CSV文件中的不一樣。其實在整個的SQL語句中只有OPENROWSET是用來處理CSV文件的。其它部分都是普通的T-SQL,在T-SQL中能做的事情在這里都可以做。例如:如果你的TC_Contacts比CSV多一個欄位gid uniqueidentifier ,那麼就可以把SQL語句修改為:
1 INSERT INTO TC_Contacts
2 SELECT newid(),* FROM
3 OPENROWSET('MSDASQL',
4 'Driver={Microsoft Text Driver (*.txt; *.csv)};
5 DEFAULTDIR=D:/Data;Extensions=CSV;',
6 'SELECT * FROM "Contacts.CSV"')
這樣就可以給每條記錄增加一個id了。
2.SQL代碼中的DefaultDir 也就是D:/Data 是指存在於SQL Server伺服器上的位置,而不是在提交該代碼的客戶機上。這一點對於初次接觸的人來說很關鍵。SQL Server如果在伺服器上找不到文件會報告錯誤。但是這個錯誤的消息不是那麼直接了當。
3.有的CSV文件中第一行不是列標題,而是和其它行一樣是普通的數據行。這個時候就需要一個Schema.ini來定義CSV文件的格式。Schema.ini的格式我會專門寫一篇來介紹一下。在Schema.ini文件中會指定CSV文件的一些特性,這樣有助於Microsoft Text Driver來處理數據.
第二種:直接使用
通過OdbcConnection可以創建一個鏈接到csv文件的鏈接,鏈接字元串的格式是:"Driver={Microsoft Text Driver (*.txt;*.csv)};Dbq="+cvs文件的文件夾路徑+" Extensions=asc,csv,tab,txt; Persist Security Info=False";
創建連接之後就可以使用DataAdapter等存取csv文件了。
public DataSet getdatasetfromcsv(string filepath, string filename)
{
string strconn = @"driver={microsoft text driver (*.txt; *.csv)};dbq=";
strconn += filepath; //filepath, for example: c:/
strconn += ";extensions=asc,csv,tab,txt;" ;
OdbcConnection objconn = new OdbcConnection(strconn);
DataSet dscsv = new DataSet();
try
{
string strsql = "select * from " + filename; //filename, for example: 1.csv
OdbcDataAdapter odbccsvdataadapter = new OdbcDataAdapter(strsql,objconn);
odbccsvdataadapter.Fill(dscsv);
return dscsv;
}
catch(Exception ex)
{
throw ex;
}
}