C#:CsvReader读取.CSV文件并转换成DataTable
2024-09-22 03:52:05
原文引用:https://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader
using LumenWorks.Framework.IO.Csv;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks; /// <summary>
/// 获取路径下的.csv文件
/// </summary>
/// <param name="FilePath"></param>
/// <returns></returns>
public static DataTable GetStream(string FilePath)
{
FileStream fileStream = new FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
byte[] bytes = new byte[fileStream.Length];
fileStream.Read(bytes, 0, bytes.Length);
fileStream.Close();
Stream stream = new MemoryStream(bytes);
return GetData(stream);
} /// <summary>
/// 将.csv文件转换成DataTable
/// </summary>
/// <param name="stream"></param>
/// <returns></returns>
private static DataTable GetData(Stream stream)
{
using (stream)
{
using (StreamReader input = new StreamReader(stream, Encoding.GetEncoding("GBK")))
{
using (CsvReader csv = new CsvReader(input, true))
{
DataTable dt = new DataTable();
//第一行字段数量
int columnCount = csv.FieldCount;
//标题数组
string[] headers = csv.GetFieldHeaders();
//循环添加标题行
for (int i = 0; i < columnCount; i++)
{
dt.Columns.Add(headers[i]);
}
//循环添加列数据
while (csv.ReadNextRecord())
{
DataRow dr = dt.NewRow();
for (int i = 0; i < columnCount; i++)
{
if (!string.IsNullOrWhiteSpace(csv[i]))
{
dr[i] = csv[i];
}
}
dt.Rows.Add(dr);
}
return dt;
}
}
}
}
我只是参考原文里面的实例,根据我项目的需求换了一种写法,换汤不换药(先看明白简单的CsvReader对.csv标题和列的操作然后根据自身的需求去改写,主要改也是简单的循环或者根据解析格式不同换一种格式其它的看需求调整。),希望对大家有所帮助,共同学习!
最新文章
- Softreference | WeakReference
- 天河微信小程序入门《四》:融会贯通,form表单提交数据库
- Swift -字符串
- markdown安装和使用
- php基础06:运算符
- C# Winform常见的Editor及其它经验
- 结合NGUI做的手机拍照(可自定义相框)
- 分享web前端七款HTML5 Loading动画特效集锦
- SSM拦截器应用
- ios 设置label的高度随着内容的变化而变化
- 谈谈iOS中粘性动画以及果冻效果的实现
- BZOJ 1084 最大子矩阵
- zoj 1078
- Python爬虫通过替换http request header来欺骗浏览器实现登录
- Oracle查询用户权限
- Web系统Login拦截器
- c++析构函数调用时机
- IDEA常用快捷键总结
- javaScript+html5实现图片拖拽
- jxl 读取xls,并转为二维数组可进行保存