解析Csv檔案並轉化為DataTable(處理支付寶當面付賬單)
阿新 • • 發佈:2019-02-14
最近在自己做一個小型對賬系統,包括支付寶,微信,銀聯三個內容,因為支付寶當面付賬單提供的介面是提供下載連結,然後下載一個壓縮包,技術還沒有那麼高超,用程式碼解壓,思路是:
1.通過介面,獲取賬單下載連結,通過下面程式碼訪問網頁,然後進行下載檔案。
System.Diagnostics.Process.Start(url);
2.開啟本地視窗,獲取檔案路徑
ps:因為支付寶賬單有兩個檔案,分別是:業務明細和業務明細(彙總),兩個檔案的Csv格式是不同的。string Route; //路徑 OpenFileDialog fileDialog = new OpenFileDialog(); fileDialog.Multiselect = true; fileDialog.Title = "請選擇檔案"; fileDialog.Filter = "所有檔案(*.*)|*.*"; if (fileDialog.ShowDialog() == DialogResult.OK) { Route = fileDialog.FileName; try { zfb_dt = re.OpenCSVFile(Route); dgv1.DataSource = zfb_dt; label5.Text = "支付寶"; mode.zfb_dt = zfb_dt; } catch (Exception ex) { MessageBox.Show("選擇檔案格式不規範,請選擇“業務明細”檔案!"); } } else { MessageBox.Show("未選擇檔案"); }
3.通過檔案路徑,解析Csv檔案,轉化為dataTabel
Csv檔案格式:程式碼如下
public DataTable OpenCSVFile(string filepath) { DataTable zfb_dt = new DataTable(); bool blnFlag = true; DataColumn dc; DataRow dr; string[] aryline; StreamReader mysr = new StreamReader(filepath, System.Text.Encoding.Default); string strline; int a = 0; while ((strline = mysr.ReadLine()) != null) { aryline = strline.Split(new char[] { ',' }); int intColCount = aryline.Length; if (intColCount > 1)//列數超過1 { //給datatable加上列名 if (blnFlag) { blnFlag = false; for (int i = 0; i < intColCount; i++) { dc = new DataColumn(aryline[i].ToString()); zfb_dt.Columns.Add(dc); } } //撈出Csv檔案的列標題,但是在內容中不顯示 if (a == 1) { //填充資料並加入到datatable中 dr = zfb_dt.NewRow(); for (int i = 0; i < intColCount; i++) { dr[i] = aryline[i]; } zfb_dt.Rows.Add(dr); } a = 1; } } //只顯示datatable其中需要的幾列欄位 DataTable dt = zfb_dt.DefaultView.ToTable(false, new string[] { "商戶訂單號", "商品名稱", "業務型別", "商家實收(元)", "完成時間" }); return dt; }
總結:主要就是將csv中的資料轉化為特定編碼的字元。然後每次讀取一行,並找出想要的行,進行處理,迴圈儲存為dataTable中的行。
如果大家有更好的方法,希望可以在評論中留下,相互學習,謝謝。
如果此部落格對你有幫助或者還有什麼疑問,大家都可以在評論中一起討論,謝謝。