C# Csv实现基本的读写和转换DataTable
Csv文件基本的属性
csv文件可以在excel或者wps中以表格形式打开,本质上是每一列以,
逗号为分隔符的一种格式,在C#中操作可以把他当做普通txt文本读入,然后通过处理,
逗号分隔符来对数据进行处理转换。
在表格中打开:
在记事本中打开:
Csv读写方式
方式一:一次性读写
使用File.ReadAllLines
一次性读入。File.WriteAllLines
一次性写入。
这种方式适合csv文件内容不多的情况下使用。
示例:
string path="data.csv"; var lines = File.ReadAllLines(path).ToList();
完整的实现:
/// <summary> /// 读取Csv,返回行集合 /// </summary> /// <param name="path"></param> /// <param name="hasTitle"></param> /// <returns></returns> public static List<string> ReadCsv(string path, bool hasTitle) { if (!File.Exists(path)) return new List<string>(); var lines = File.ReadAllLines(path).ToList(); if (hasTitle) { lines.RemoveAt(0); } return lines; }
方式二:使用文件流形式读写
使用StreamReader
,一行一行的读取文件中的内容,并且处理。写入类似
示例:
using (StreamReader sr = new StreamReader(path)) { string line; while ((line = sr.ReadLine()) != null) { //处理行数据 } }
Csv文件读写DataTable类型
将CSV文件读入数据转成DataTable类型
/// <summary> /// 读取Csv文件,加载到DataTable /// </summary> /// <param name="path">csv文件路径</param> /// <param name="hasTitle">是否有标题行</param> /// <param name="SafeLevel">安全等级:0:错误格式行正常添加;1:错误行忽略(不添加),2:出现错误弹出异常</param> /// <returns></returns> public static DataTable ReadCsvToDataTable(string path, bool hasTitle = false, int SafeLevel = 0) { DataTable dt = new DataTable(); var lines = ReadCsv(path, false); bool isFirst = true; foreach (var item in lines) { string[] values = item.Split(','); if (isFirst) { for (int i = 0; i < values.Length; i++) { dt.Columns.Add(); } if (hasTitle) { for (int i = 0; i < values.Length; i++) { dt.Columns[i].ColumnName = values[i]; } continue; } isFirst = false; } if (values.Length == dt.Columns.Count) { dt.Rows.Add(values); } else { switch (SafeLevel) { case 0: if (values.Length > dt.Columns.Count) { var res = values.ToList(); res.RemoveRange(dt.Columns.Count, values.Length - dt.Columns.Count); dt.Rows.Add(res.ToArray()); } else { dt.Rows.Add(values); } break; case 1: continue; default: throw new Exception("CSV格式错误:表格各行列数不一致"); } } } return dt; } /// <summary> /// 以文件流形式读取Csv文件,加载到DataTable /// </summary> /// <param name="path">csv文件路径</param> /// <param name="hasTitle">是否有标题行</param> /// <param name="SafeLevel">安全等级:0:错误格式行正常添加;1:错误行忽略(不添加),2:出现错误弹出异常</param> /// <returns></returns> /// <exception cref="Exception"></exception> public static DataTable ReadCsvByStream(string path, bool hasTitle = false, int SafeLevel = 0) { DataTable dt = new DataTable(); bool isFirst = true; using (StreamReader sr = new StreamReader(path)) { string line; while ((line = sr.ReadLine()) != null) { string[] values = line.Split(','); if (isFirst) { for (int i = 0; i < values.Length; i++) { dt.Columns.Add(); } isFirst = false; } //有表头则添加 if (hasTitle) { for (int i = 0; i < values.Length; i++) { dt.Columns[i].ColumnName = values[i]; } hasTitle = false; } else { if (values.Length == dt.Columns.Count) { dt.Rows.Add(values); } else { switch (SafeLevel) { case 0: if (values.Length > dt.Columns.Count) { var res = values.ToList(); res.RemoveRange(dt.Columns.Count, values.Length - dt.Columns.Count); dt.Rows.Add(res.ToArray()); } else { dt.Rows.Add(values); } break; case 1: continue; default: throw new Exception("CSV格式错误:表格各行列数不一致"); } } } } } return dt; }
将DataTable类型写入到Csv文件中去
/// <summary> /// 以文件流形式将DataTable写入csv文件 /// </summary> /// <param name="dt"></param> /// <param name="path"></param> /// <param name="hasTitle"></param> /// <returns></returns> public static bool WriteToCsvByDataTable(DataTable dt, string path, bool hasTitle = false) { using (StreamWriter sw = new StreamWriter(path)) { //输出标题行(如果有) if (hasTitle) { for (int i = 0; i < dt.Columns.Count; i++) { sw.Write(dt.Columns[i].ColumnName); if (i != dt.Columns.Count - 1) { sw.Write(","); } } sw.WriteLine(); } //输出文件内容 for (int i = 0; i < dt.Rows.Count; i++) { for (int j = 0; j < dt.Columns.Count; j++) { sw.Write(dt.Rows[i][j].ToString()); if (j != dt.Columns.Count - 1) { sw.Write(","); } } sw.WriteLine(); } } return true; }
到此这篇关于C# Csv实现基本的读写和转换DataTable的文章就介绍到这了,更多相关C# Csv读写和转换DataTable内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!
原文出处:https://blog.csdn.net/qq_39427511/article/details/128378751
相关文章
使用PHP+JavaScript将HTML页面转换为图片的实例分享
这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19- 本文主要介绍了C#中new的几种用法,具有很好的参考价值,下面跟着小编一起来看下吧...2020-06-25
pandas pd.read_csv()函数中parse_dates()参数的用法说明
这篇文章主要介绍了pandas pd.read_csv()函数中parse_dates()参数的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-05- 这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
- 这篇文章主要介绍了C#实现简单的Http请求的方法,以实例形式较为详细的分析了C#实现Http请求的具体方法,需要的朋友可以参考下...2020-06-25
- 在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
- 这篇文章主要介绍了c# 三种方法调用WebService接口的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-07
- 我们在使用C#做项目的时候,基本上都需要制作登录界面,那么今天我们就来一步步看看,如果简单的实现登录界面呢,本文给出2个例子,由简入难,希望大家能够喜欢。...2020-06-25
- 这篇文章主要介绍了C#中list用法,结合实例形式分析了C#中list排序、运算、转换等常见操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)
这篇文章主要介绍了使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25- 这篇文章主要介绍了C#实现跨线程操作控件方法,主要采用异步访问方式实现,需要的朋友可以参考下...2020-06-25
PHP编码转换函数mb_convert_encoding与iconv用法
文章来实现一个PHP编码转换函数mb_convert_encoding与iconv用法,希望例子能帮助到各位。 将一个短信接口代码从apache迁移到nginx+php-fpm后,发现无法发出短信了,查...2016-11-25- 本文通过两个示例讲解了一下Process类调用外部应用程序的基本用法,并简单讲解了StartInfo属性,有需要的朋友可以参考一下。...2020-06-25
- 这篇文章主要给大家介绍了关于C#创建自定义控件及添加自定义属性和事件使用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-25
- 这篇文章主要介绍了C#中静态方法和实例化方法的区别、使用,文中讲解的非常细致,对大家的学习有所帮助,感兴趣的朋友可以了解下...2020-06-25
- 这篇文章主要介绍了C# List 排序各种用法与比较的相关资料,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
- 这篇文章主要介绍了简单实现C#窗体程序判断是否闰年的相关代码,禁止窗体调整大小,关闭窗体前的判断,感兴趣的小伙伴们可以参考一下...2020-06-25
- 这篇文章主要介绍了C#二维数组基本用法,以实例形式分析了C#中二维数组的定义、初始化、遍历及打印等用法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25