c# 简单文件流读写CSV文件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using System.Reflection;
using System.IO;
using System.Data;
using System.Web;
using System.Data.Odbc;
using System.Text.RegularExpressions;
using System.Collections; namespace KernelClass
{
public class CSVHelper
{ /// <summary>
/// The class CSVHelper read the data from CSV file and store it in a DataTable class,
/// and allows to return a column with index or column name.
/// </summary>
private static readonly char[] FormatSplit = new char[] { ',' };
private const string replaceDoubleQuotes = "$replaceDoubleQuotes$";
private const string tableName = "csvTable"; public static DataTable ReadCSV(string filePath)
{
FileInfo fi = new FileInfo(filePath);
if (fi == null || !fi.Exists) return null; StreamReader reader = new StreamReader(filePath); string line = string.Empty;
int lineNumber = ; DataTable dt = new DataTable(); while ((line = reader.ReadLine()) != null)
{
if (lineNumber == )
{
dt = CreateDataTable(line);
if (dt.Columns.Count == ) return null;
}
else
{
bool isSuccess = CreateDataRow(ref dt, line);
if (!isSuccess)
{
throw new FileLoadException("There are some data unconsistent in your file.");
}
}
lineNumber++;
}
reader.Close(); //如果最后一列是空的话就删除
bool HasValueForLastestColumn = false;
int indexLastestColumn = dt.Columns.Count -;
for (var i = ; i < dt.Rows.Count; i++)
{
if (!string.IsNullOrEmpty(dt.Rows[indexLastestColumn][i].ToString().Trim())) {
HasValueForLastestColumn = true;
break;
}
}
if (HasValueForLastestColumn) {
dt.Columns.RemoveAt(indexLastestColumn);
}
return dt;
} public static bool WriteCSV(DataTable _dataSourc, string filePath)
{
string data = ExportCSV(_dataSourc);
return PhysicalFile.SaveFile(data, filePath);
} public static string ExportCSV(DataTable _dataSource)
{
StringBuilder strbData = new StringBuilder();
foreach (DataColumn column in _dataSource.Columns)
{
strbData.Append(column.ColumnName + ",");
}
strbData.Append("\n");
foreach (DataRow dr in _dataSource.Rows)
{
for (int i = ; i < _dataSource.Columns.Count; i++)
{
string rowValue = dr[i].ToString().Replace("\"", "\"\"");
if(rowValue.Contains(','))
strbData.Append("\"" + dr[i].ToString().Replace("\"", "\"\"") + "\",");
else
strbData.Append(dr[i].ToString() + ",");
}
strbData.Append("\n");
}
return strbData.ToString();
} public static List<double> GetColumnWithName(string columnName, DataTable dt)
{
List<double> list = new List<double>(); var index = dt.Columns.IndexOf(columnName);
list = GetColumnWithIndex(index, dt); return list;
} public static List<double> GetColumnWithIndex(int index, DataTable dt)
{
List<double> list = new List<double>(); foreach (DataRow dr in dt.Rows)
{
var s = dr[index].ToString();
if (string.Compare(s, "") == )
{
break;
}
double value = Convert.ToDouble(s);
list.Add(value);
} return list;
} private static DataTable CreateDataTable(string line)
{
DataTable dt = new DataTable();
foreach (string field in
line.Split(FormatSplit, StringSplitOptions.None))
{
dt.Columns.Add(field);
}
return dt;
} private static bool CreateDataRow(ref DataTable dt, string line)
{
DataRow dr = dt.NewRow();
string src = string.Empty;
Hashtable fields = new Hashtable(); if (!string.IsNullOrEmpty(line))
{
src = line.Replace("\"\"", replaceDoubleQuotes);
//正则表达式找出用双引号包括的字符串, 下面循环是为了防止字符串中含有分隔符 ,
MatchCollection col = Regex.Matches(src, "\"([^\"]+)\"", RegexOptions.ExplicitCapture);
IEnumerator ie = col.GetEnumerator(); while (ie.MoveNext())
{
string patn = ie.Current.ToString();
int key = src.Substring(, src.IndexOf(patn)).Split(',').Length-; if (!fields.ContainsKey(key))
{
fields.Add(key, patn.Trim(new char[] { ',', '"' }));
src = src.Replace(patn, "");
}
} string[] arr = src.Split(',');
for (int i = ; i < arr.Length; i++)
{
if (!fields.ContainsKey(i))
fields.Add(i, arr[i]);
}
} if (fields.Count == || fields.Count > dt.Columns.Count)
{
return false;
} for (int i = ; i < fields.Count; i++)
{
dr[i] = fields[i].ToString().Replace(replaceDoubleQuotes, "\"");
} dt.Rows.Add(dr);
return true;
}
} }
c# 简单文件流读写CSV文件的更多相关文章
- js实现使用文件流下载csv文件
1. 理解Blob对象 在Blob对象出现之前,在javascript中一直没有比较好的方式处理二进制文件,自从有了Blob了,我们就可以使用它操作二进制数据了.现在我们开始来理解下Bolb对象及它的 ...
- 使用commons-csv简单读写CSV文件
文章首发于我的github博客 需求 客户的开发测试环境将做迁移.因此需要对zookeeper上的重要的数据以CSV文件格式做备份. 本文通过Apache的commons-csv操作CSV文件.官网地 ...
- 用opencsv文件读写CSV文件
首先明白csv文件长啥样儿: 用excel打开就变成表格了,看不到细节 推荐用其它简单粗暴一点儿的编辑器,比如Notepad++, csv文件内容如下: csv文件默认用逗号分隔各列. 有了基础的了解 ...
- 使用Python读写csv文件的三种方法
Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是 ...
- python3读写csv文件
python读取CSV文件 python中有一个读写csv文件的包,直接import csv即可.利用这个python包可以很方便对csv文件进行操作,一些简单的用法如下. 1. 读文件 csv_ ...
- python读写csv文件
文章链接:https://www.cnblogs.com/cloud-ken/p/8432999.html Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗 ...
- 【基础巩固】文件流读写、大文件移动 FileStream StreamWriter File Path Directory/ ,m资料管理器(递归)
C#获取文件名 扩展名 string fullPath = @"d:\test\default.avi"; string filename = Path.GetFileName(f ...
- JAVA读写CSV文件
最近工作需要,需要读写CSV文件的数据,简单封装了一下 依赖读写CSV文件只需引用`javacsv`这个依赖就可以了 <dependency> <groupId>net.sou ...
- (Python基础教程之十二)Python读写CSV文件
Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...
随机推荐
- vc++ 内存连续读写操作
//初始化内存 int *data=(int*)malloc(sizeof(int)*4); ZeroMemory(data, sizeof(int)*4); int *m=(int*)malloc( ...
- Source not found The JAR file …has no source attachment.
问题描述如下: 解决方案: 选中你的项目方案,然后鼠标右键选择属性Properties,如下图: 然后依次按下图操作就完成了.
- C# 添加系统计划任务方案
你可以在Windows 计划任务管理器里面添加计划任务,调试OK后导出XML文件,然后在要部署的计算机上执行CMD导入命令,把计划任务信息配置导入到服务器上的计划任务列表中,命令如下: SCHTASK ...
- python35
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码.Python对bytes类型的数据用带b前缀的单引号或双引号表示x = b'ABC' //每个字 ...
- [css filter]filter在界面实现滤镜效果
最近逛当当,发现当当尾品会的首页推荐最底端的商品链接是灰色的图片,然后鼠标hover之后就会变成正常的彩色 肯定不是通过img来改变的,然后直接看了一下源码,其实是用的filter属性 _(:з」∠) ...
- 【FAQ】【JSP】HTTP Status 500 - Summary(问题排查时候应该仔细分析所有的错误打印说明)
Question 1.HTTP Status 500 - Unable to compile class for JSP:'***' cannot be resolved to a type 原因分析 ...
- java reflect 初始学习 动态加载类
首先要理解Class类: 在java 的反射中,Class.forName("com.lilin.Office") 使用类的全名,这样获取,不仅仅表示了类的类类型,同时还代表着类的 ...
- 安装Mongodb3.0.6单实例
[root@b28-17-51 ~]#mkdir -p /export/data [root@b28-17-51 ~]#mkdir -p /export/log [root@b28-17-51 exp ...
- Jni中C++和Java的参数传递
Jni中C++和Java的参数传递 如何使用JNI的一些基本方法和过程在网上多如牛毛,如果你对Jni不甚了解,不知道Jni是做什么的,如何建立一个基本的jni程序,或许可以参考下面下面这些文章:利用V ...
- Python实现CART(基尼指数)
Python实现CART(基尼指数) 运行环境 Pyhton3 treePlotter模块(画图所需,不画图可不必) matplotlib(如果使用上面的模块必须) 计算过程 st=>start ...