解析Csv文件并转化为DataTable(处理支付宝当面付账单)

最近在自己做一个小型对账系统,包括支付宝,微信,银联三个内容,因为支付宝当面付账单提供的接口是提供下载链接,然后下载一个压缩包,技术还没有那么高超,用代码解压,思路是:

1.通过接口,获取账单下载链接,通过下面代码访问网页,然后进行下载文件。
System.Diagnostics.Process.Start(url);
2.打开本地窗口,获取文件路径   
            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("未选择文件");
            }
ps:因为支付宝账单有两个文件,分别是:业务明细和业务明细(汇总),两个文件的Csv格式是不同的。
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中的行。

如果大家有更好的方法,希望可以在评论中留下,相互学习,谢谢。

如果此博客对你有帮助或者还有什么疑问,大家都可以在评论中一起讨论,谢谢。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值