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

2023-10-21 20:50

本文主要是介绍解析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中的行。

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

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

这篇关于解析Csv文件并转化为DataTable(处理支付宝当面付账单)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/256890

相关文章

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Java Response返回值的最佳处理方案

《JavaResponse返回值的最佳处理方案》在开发Web应用程序时,我们经常需要通过HTTP请求从服务器获取响应数据,这些数据可以是JSON、XML、甚至是文件,本篇文章将详细解析Java中处理... 目录摘要概述核心问题:关键技术点:源码解析示例 1:使用HttpURLConnection获取Resp

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.