CSV操作类

///////////////////////////////////////////////////////////////////////
//Purpose:CSV格式文件的操作
//Author: FranticPink
//Date: 2015-07-22
//Version: 1.0
///////////////////////////////////////////////////////////////////////
/// <summary>
/// CSV格式文件的操作
/// </summary>
public class CsvHelper
{
#region 将CSV文件的数据读取到DataTable中+ static DataTable OpenCSV(string filePath)
/// <summary>
/// 将CSV文件的数据读取到DataTable中
/// </summary>
/// <param name="filePath">CSV文件路径</param>
/// <returns>返回读取了CSV数据的DataTable</returns>
public static DataTable OpenCSV(string filePath)
{

System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("gb2312");
DataTable dt = new DataTable();
using (FileStream fs = new FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read))
{

//StreamReader sr = new StreamReader(fs, Encoding.UTF8);
StreamReader sr = new StreamReader(fs, encoding);
//string fileContent = sr.ReadToEnd();
//encoding = sr.CurrentEncoding;
//记录每次读取的一行记录
string strLine = "";
//记录每行记录中的各字段内容
string[] DataLine = null;
string[] tableHead = null;
//标示列数
int columnCount = 0;
//标示是否是读取的第一行
bool IsFirst = true;
//逐行读取CSV中的数据
while ((strLine = sr.ReadLine()) != null)
{
if (IsFirst == true)
{
tableHead = strLine.Split(‘,‘);

IsFirst = false;
columnCount = tableHead.Length;
//创建列
for (int i = 0; i < columnCount; i++)
{
tableHead[i] = DelStr(tableHead[i]);
DataColumn dc = new DataColumn(tableHead[i]);
dt.Columns.Add(dc);
}
}
else
{
if (strLine.Split(‘,‘) != null)
{
DataLine = strLine.Split(‘,‘);
DataRow dr = dt.NewRow();
for (int j = 0; j < DataLine.Length; j++)
{

dr[j] = DelStr(DataLine[j]);

}
dt.Rows.Add(dr);
}
}
}
if (DataLine != null && DataLine.Length > 0)
{
dt.DefaultView.Sort = tableHead[0] + " " + "asc";
}

sr.Close();
fs.Close();
return dt;
}
}
/// <summary>
/// 去除字符串中的空格,换行,引号
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string DelStr(string str)
{
string data = str;
string strold = "\""; string strnew = "";
data = str.Replace(strold, strnew);
strold = " "; strnew = "";
data = data.Replace(strold, strnew);
strold = "\n"; strnew = "";
data = data.Replace(strold, strnew);
return data;
}
#endregion

#region DataTable中数据写入到CSV文件中+static void SaveCSV(DataTable dt, string fullPath, FileMode openMode)
/// <summary>
///将DataTable中数据写入到CSV文件中
/// </summary>
/// <param name="dt">提供保存数据的DataTable</param>
/// <param name="fullPath">CSV的文件路径</param>
/// <param name="openMode">文件打开方式</param>
public static void SaveCSV(DataTable dt, string fullPath, FileMode openMode)
{
FileInfo fi = new FileInfo(fullPath);
if (!fi.Directory.Exists)
{
fi.Directory.Create();
}
using (FileStream fs = new FileStream(fullPath, openMode, System.IO.FileAccess.Write))
{
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8);
string data = "";
//写出列名称
for (int i = 0; i < dt.Columns.Count; i++)
{
data += dt.Columns[i].ColumnName.ToString();
if (i < dt.Columns.Count - 1)
{
data += ",";
}
}
sw.WriteLine(data);
//写出各行数据
for (int i = 0; i < dt.Rows.Count; i++)
{
data = "";
for (int j = 0; j < dt.Columns.Count; j++)
{
string str = dt.Rows[i][j].ToString();
data += str;
if (j < dt.Columns.Count - 1)
{
data += ",";
}
}
sw.WriteLine(data);
}
}
}
#endregion

#region 将DataRow中数据写入到CSV文件中+static void SaveCSVRow(DataRow dt, string fullPath)
/// <summary>
/// 将DataRow中数据写入到CSV文件中
/// </summary>
/// <param name="dt">提供保存数据的DataRow</param>
/// <param name="fullPath">CSV的文件路径</param>
public static void SaveCSVRow(DataRow dt, string fullPath)
{
FileInfo fi = new FileInfo(fullPath);
if (!fi.Directory.Exists)
{
fi.Directory.Create();
}
using (FileStream fs = new FileStream(fullPath, System.IO.FileMode.Append, System.IO.FileAccess.Write))
{
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8);
string data = "";
for (int j = 0; j < dt.ItemArray.Length; j++)
{
string str = dt[j].ToString();
data += str;
if (j < dt.ItemArray.Length - 1)
{
data += ",";
}
}
sw.WriteLine(data);
}
}
#endregion

#region 将DataGridViewRow数据条存储到CSV文件中+static void SaveDGRow(DataGridViewRow dt, string fullPath)
/// <summary>
/// 将DataGridViewRow数据条存储到CSV文件中
/// </summary>
/// <param name="dt">提供保存数据的DataGridViewRow</param>
/// <param name="fullPath">CSV的文件路径</param>
//public static void SaveDGRow(DataGridViewRow dt, string fullPath)
//{
// FileInfo fi = new FileInfo(fullPath);
// if (!fi.Directory.Exists)
// {
// fi.Directory.Create();
// }
// using (FileStream fs = new FileStream(fullPath, System.IO.FileMode.Append, System.IO.FileAccess.Write))
// {
// StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8);
// string data = "";
// for (int j = 1; j < dt.Cells.Count; j++)
// {
// string str = dt.Cells[j].Value.ToString();
// data += str;
// if (j < dt.Cells.Count - 1)
// {
// data += ",";
// }
// }
// sw.WriteLine(data);
// }
//}
#endregion

#region 将CSV文件的数据读取判断是否存在数据中+static bool ChargeStr(string filePath, string str)
/// <summary>
/// 将CSV文件的数据读取判断是否存在数据中
/// </summary>
/// <param name="filePath">CSV文件路径</param>
/// <param name="str">对比的数据</param>
/// <returns>是否存在数据</returns>
public static bool ChargeStr(string filePath, string str)
{

System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("gb2312");
using (FileStream fs = new FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
StreamReader sr = new StreamReader(fs, encoding);
//记录每次读取的一行记录
string strLine = "";
//记录每行记录中的各字段内容
string[] DataLine = null;
bool flag = false;
//逐行读取CSV中的数据
while ((strLine = sr.ReadLine()) != null)
{
if (strLine.Split(‘,‘) != null)
{
DataLine = strLine.Split(‘,‘);

for (int j = 0; j < DataLine.Length; j++)
{

if (str == DelStr(DataLine[j]))
{
flag = true;
}

else
{
flag = false;
}
}
}
}
return flag;
}
}
#endregion

#region 将CSV文件中需要的数据转化为字符串+static string CSVToStr(string filePath, string indexl)
/// <summary>
/// 将CSV文件中需要的数据转化为字符串
/// </summary>
/// <param name="filePath">CSV文件路径</param>
/// <param name="indexl">需要的字段索引,如“235”要的是2,3,5列数据,如果为空默认为全部</param>
/// <returns>返回读取了CSV数据的string字符串</returns>
public static string CSVToStr(string filePath, string indexl)
{
FileInfo fi = new FileInfo(filePath);
if (!fi.Directory.Exists)
{
fi.Directory.Create();
}
string str = "";
System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("gb2312");
using (FileStream fs = new FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
StreamReader sr = new StreamReader(fs, encoding);
int columnCount = 0;

string strLine = "";
//记录每行记录中的各字段内容
string[] DataLine = null;
while ((strLine = sr.ReadLine()) != null)
{
if (strLine.Split(‘,‘) != null)
{
DataLine = strLine.Split(‘,‘);
columnCount = DataLine.Length;
for (int j = 0; j < columnCount; j++)
{
if (indexl == null)
{
str += DelStr(DataLine[j]);
if (j == columnCount - 1)
{
str += "|";
}
else
{
str += ",";
}

}
else
{
for (int i = 1; i < indexl.Length; i++)
{
int inx = Convert.ToInt32(indexl.Substring(i - 1, 1));
str += DelStr(DataLine[inx]);
str += ",";
}
}

}

}
}
}
return str;
}
#endregion
}

时间: 2024-10-04 19:55:41

CSV操作类的相关文章

C#操作CSV文件类实例

本文实例讲述了C#操作CSV文件类.分享给大家供大家参考.具体分析如下: 这个C#类用于转换DataTable为CSV文件.CSV文件转换成DataTable,如果需要进行CSV和DataTable之间进行转换,使用这个类非常合适. using System.Data; using System.IO; namespace DotNet.Utilities { /// <summary> /// CSV文件转换类 /// </summary> public static class

Excel 操作类

转载:http://www.cnblogs.com/fellowcheng/archive/2010/08/21/1805158.html ExcelHelper(Excel2007) Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->using System; using System.Collections.Generic; using Sys

ASP.net如何保证EF操作类线程内唯一

说到线程内唯一,肯定会想到单例模式,但是如果多用户访问网站就会出现问题.ASP.net中有两种方法可以保证EF操作类线程内唯一(目前只会这两种,以后有好的方法再添加): 1.httpcontext(实现原理也是通过数据槽callcontext) 将EF操作类通过键值对方法保存在HttpContext.Current.Items["key"],封装成方法直接调用 2.callcontext public static DbContext CreateDbContext() { DbCon

反射之操作类,方法,属性等

1.操作类 获取类,并通过反射获取一个实例对象 Class class1 = Student.class; Student student = (Student)class1.newInstance();   //默认调用无参数的构造方法 student.setName("heh"); System.out.println(student.getName()); 2.操作构造方法   获取指定参数类型的构造方法,通过此对象创建一个特定参数值的实例对象 Class class1 = St

Android打造属于自己的数据库操作类。

1.概述 开发Android的同学都知道sdk已经为我们提供了一个SQLiteOpenHelper类来创建和管理SQLite数据库,通过写一个子类去继承它,就可以方便的创建.管理数据库.但是当我们需要去做增删改查的操作的时候,就得通过getWritableDatabase获取一个SQLiteDataBase然后老老实实去写操作值的put以及查询返回的Cursor处理,其实我们可以搞一个对象来帮我们干这些事情,打造属于你自己的数据库操作类. 2.操作类的初显形 假设现在我们什么都没有,我们要去搞一

使用RedisTemplate的操作类访问Redis(转载)

原文地址:http://www.cnblogs.com/luochengqiuse/p/4641256.html private ValueOperations<K, V> valueOps; private ListOperations<K, V> listOps; private SetOperations<K, V> setOps; private ZSetOperations<K, V> zSetOps; 1. RedisOperations接口说明

php 的mysql操作类

亲自测试,网上其他版本没法用,有很多错误,这是本人亲自测试用的,绝对增删改查都可以. <?php /** * Created by Netbeans. * User: Lugo * Date: 16-7-14 * Version: 1.0.0 * Time: 上午10:50 */ class MysqlHelper { const HOST="localhost"; const DATABASE = "demo"; const ENCODING = "

数字(数学)操作类 Math Random 类 ,大数字操作类

Math 提供了大量的数学操作方法 Math类中所有的方法都是static 方法 重点看这个操作,四舍五入 System.out.println(Math.round(-16.5)) ; -16 System.out.println(Math.round(16.5)) ; 17 大于等于0.5进位. Random类 取得随机数的类 java.util 包 产生100之内的随机整数 Random rand = new Random() ; for(int x = 0 ; x < 10 ; x ++

完整的文件和目录操作类

using System; using System.Text; using System.IO; namespace HelloCsharp.Utilities { /// <summary> /// 文件操作类 /// </summary> public static class DirFile { #region 检测指定目录是否存在 /// <summary> /// 检测指定目录是否存在 /// </summary> /// <param n