using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Windows.Forms;
using System.IO;
namespace FileReadAndWrite
{
<summary>
操作CSV存取类
</summary>
public class OutForCVS
{
#region 变量
<summary>
取出配置文件中的分隔符
</summary>
private static string _splitChar = null;
<summary>
取出配置文件中的编码方式
</summary>
private static string _encodeFormat = null;
#endregion
#region 构造方法
<summary>
构造方法获取分隔符、编码方式
</summary> #endregion
#region 写CSV方法
<summary>
写入CSV
</summary>
<param name="hasHeader">列头</param>
<param name="dtOutputCSV">文件内容</param>
public void WriteCSV(bool hasHeader, DataTable dtOutputCSV)
{
Log开始
INGLog.WriteLog(INGLogLevel.Debug, INGConstants.START);
获取写入文件名称以及格式
String strFileName = DateTime.Now.ToString("YYYYMMDDhhmm");
SaveFileDialog savFileDialog = new SaveFileDialog();
savFileDialog.Reset();
savFileDialog.DefaultExt = "csv";
savFileDialog.Filter = "CSV|*.csv";
savFileDialog.ShowDialog();
strFileName = savFileDialog.FileName;
判断文件名
if (string.IsNullOrEmpty(strFileName))
{
信息提示
INGMessage.ShowMessage("M009", "WriteFileName");
}
重载方法调用,写入文件
WriteCSV(hasHeader, dtOutputCSV, strFileName+".csv");
Log结束
INGLog.WriteLog(INGLogLevel.Debug, INGConstants.END);
}
#endregion
#region 写入CSV,附带路径方法
<summary>
写入CSV,附带路径
</summary>
<param name="hasHeader">列头</param>
<param name="dtOutputCSV">文件内容</param>
<param name="strPath">指定文件路径</param>
public static void WriteCSV(bool hasHeader, DataTable dtOutputCSV, string strPath)
{
Log开始
INGLog.WriteLog(INGLogLevel.Debug, INGConstants.START);
DataTable有无判断
if (dtOutputCSV == null)
{
throw new ArgumentNullException("Argument(dtOutputCSV) is null!");
}
StringBuilder初始化
StringBuilder sb = new StringBuilder();
DataTable有无数据判断
if (hasHeader)
{
添加列头
foreach (DataColumn dc in dtOutputCSV.Columns)
{
if (dc.DataType == Type.GetType("System.String"))
{
dc.ColumnName = "'" + dc.ColumnName + "'"; //修改
}
sb.Append(dc.ColumnName).Append(_splitChar);
}
创建新行
sb.Remove(sb.Length - , );
sb.Append(Environment.NewLine);
}
路径为空或者取消保存时
if (strPath == "")
{
return;
}
添加行
foreach (DataRow dr in dtOutputCSV.Rows)
{
foreach (object rowItem in dr.ItemArray)//object rowItem
{
object itemValue = rowItem;
itemValue = "'" + itemValue + "'";
sb.Append(itemValue).Append(_splitChar);
}
创建新行
sb.Remove(sb.Length - , );
sb.Append(Environment.NewLine);
}
using (TextWriter tw = new StreamWriter(strPath, false))
{
tw.Write(sb.ToString());
INGMessage.ShowMessage("M010", "Success");
tw.Flush();
tw.Close();
}
Log结束
INGLog.WriteLog(INGLogLevel.Debug, INGConstants.END);
}
#endregion
#region 读CSV文件方法
/// <summary>
/// 读CSV文件
/// </summary>
/// <param name="hasHeader">列头</param>
/// <returns>返回信息</returns>
public static DataTable ReadCSV(bool hasHeader)
{
// Log开始
//INGLog.WriteLog(INGLogLevel.Debug, INGConstants.START);
String strFileName;
using (OpenFileDialog ofdFileDialog = new OpenFileDialog())
{
ofdFileDialog.Reset();
ofdFileDialog.DefaultExt = "csv";
ofdFileDialog.Filter = "CSV|*.csv";
ofdFileDialog.ShowDialog();
// 文件名取得
strFileName = ofdFileDialog.FileName;
}
// 文件路径取得
String strFilePath = Path.GetFileName(strFileName);
// 文件路径判断
if (string.IsNullOrEmpty(strFilePath))
{
return null;
}
// Log结束
//INGLog.WriteLog(INGLogLevel.Debug, INGConstants.END);
return ReadCSV(hasHeader, strFilePath);
}
#endregion
#region 读指定路径CSV文件方法
<summary>
读指定路径CSV文件
</summary>
<param name="hasHeader">列头</param>
<param name="strPath">指定文件路径</param>
<returns>返回信息</returns>
public static DataTable ReadCSV(bool hasHeader, string strPath)
{
// Log开始
//INGLog.WriteLog(INGLogLevel.Debug, INGConstants.START);
String FileName = Path.GetFileName(strPath);
// 文件路径判断
if (string.IsNullOrEmpty(FileName))
{
return null;
}
DataTable dt = new DataTable(FileName);
// 文本文件分析instance生成
TextFieldParser parser = new TextFieldParser(strPath, Encoding.GetEncoding(_encodeFormat));
// 指定文件形式
parser.TextFieldType = FieldType.Delimited;
// 段落分割
parser.SetDelimiters(_splitChar);
// 设置CSV行计数
int iRowCnt = ;
// 到文件最后边界
while (!parser.EndOfData)
{
// 读入一行
string[] row = parser.ReadFields();
// CSV行判断
if (iRowCnt.Equals())
{
// 判断列头有无
if (hasHeader)
{
int i = ;
// 添加列到行
foreach (string sColumn in row)
{
// DataColumn初始化
DataColumn column = new DataColumn();
column.DataType = Type.GetType("System.String");
string sColumnValue = sColumn;
sColumnValue = sColumnValue.Substring(, sColumnValue.Length - );
column.ColumnName = sColumnValue;
dt.Columns.Add(column);
}
}
}
// 数据
else //修改
{
// 行添加
int rowLength = row.Length;
DataRow dr = dt.NewRow();
for (int j = ; j < rowLength; j++)
{
string columnValue = row.GetValue(j).ToString();
columnValue = columnValue.Substring(, columnValue.Length - );
dr[j] = columnValue;
}
dt.Rows.Add(dr);
}
// CSV行计数
iRowCnt++;
}
// Log结束
INGLog.WriteLog(INGLogLevel.Debug, INGConstants.END);
return dt;
}
#endregion
public void CreateCsv(System.Data.DataTable dt, string strName)
{ 先打印标头
StringBuilder strColu = new StringBuilder();
StringBuilder strValue = new StringBuilder();
int i = ;
try
{
StreamWriter sw = new StreamWriter(new FileStream(strName + ".csv", FileMode.Create), Encoding.GetEncoding("GB2312"));
for (i = ; i <= dt.Columns.Count - ; i++)
{
strColu.Append("\"" + dt.Columns[i].ColumnName + "\"");
strColu.Append(",");
}
strColu.Remove(strColu.Length - , );//移出掉最后一个,字符
sw.WriteLine(strColu);
foreach (DataRow dr in dt.Rows)
{
strValue.Remove(, strValue.Length);//移出
for (i = ; i <= dt.Columns.Count - ; i++)
{
strValue.Append("\"" + dr[i].ToString().Replace("'", "''").Replace(",", ",") + "\"");
strValue.Append(",");
}
strValue.Remove(strValue.Length - , );//移出掉最后一个,字符
sw.WriteLine(strValue);
}
sw.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
} }
}

之前所写,迁移至此

原文链接:http://user.qzone.qq.com/372806800/blog/1345305065

C#操作CSV存取类的更多相关文章

  1. java 操作 csv文件

    CSV是逗号分隔文件(Comma Separated Values)的首字母英文缩写,是一种用来存储数据的纯文本格式,通常用于电子表格或数据库软件.在 CSV文件中,数据“栏”以逗号分隔,可允许程序通 ...

  2. Python 操作csv和excel表格

    1. 操作csv表格 使用的库 csv 1. csv文件里读取数据 代码 1. 以列表形式打开 import csv f = open('csv_test.csv', 'r') # 打开csv文件 c ...

  3. python操作csv和excel文件

    1.操作csv文件 1).读取文件 import csv f=open("test.csv",'r') t_text=csv.reader(f) for t,i in t_text ...

  4. 用javacsv API 来操作csv文件

    javacsv是国外开发的一个比较好的操作csv文件的API,这里简单讲一下用法. 先下载javacsv2.0.zip的文件,解压后,把javacsv.jar 添加到项目中.  本站下载地址: htt ...

  5. C#操作.csv文件Demo

    1.使用OleDB操作.csv文件,比较费时 public static DataTable GetDataTableFromCsv(string path,bool isFirstRowHeader ...

  6. 自己封装的poi操作Excel工具类

    自己封装的poi操作Excel工具类 在上一篇文章<使用poi读写Excel>中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完 ...

  7. Redis操作Set工具类封装,Java Redis Set命令封装

    Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...

  8. Redis操作List工具类封装,Java Redis List命令封装

    Redis操作List工具类封装,Java Redis List命令封装 >>>>>>>>>>>>>>>> ...

  9. Redis操作Hash工具类封装,Redis工具类封装

    Redis操作Hash工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>> ...

随机推荐

  1. dd命令使用详解

    dd命令使用详解 http://www.cnblogs.com/qq78292959/archive/2012/02/23/2364760.html 1.命令简介 dd 的主要选项: 指定数字的地方若 ...

  2. 淘宝杨志丰:OceanBase--淘宝结构化大数据解决之道

    时至今日,“Big data”(大数据)时代的来临已经毋庸置疑,尤其是在电信.金融等行业,几乎已经到了“数据就是业务本身”的地步.这种趋势已经让很多相信数据之力量的企业做出改变.恰逢此时,为了让更多的 ...

  3. vsftp 定时任务同步

    yum install db4-utils.x86_64 -y yum install ftp vsftp lftp 在客户端 和服务端都安装vsftp服务 并配置虚拟账号 上传包内文件 [root@ ...

  4. struts配置测试中遇到报错信息,记录下

    tomcat7 jdk7myeclipse2014 部署完成后,访问页面报错struts.xml文件内容: <?xml version="1.0" encoding=&quo ...

  5. C语言中malloc()和calloc()c函数用法

    C语言中malloc()和calloc()c函数用法   函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别. malloc()函数有一个参数,即要分配的内存空间的大小: ...

  6. 商业智能BI和ERP的融合之路

    企业在发展过程中为了更好的跟上同行业的步伐,甚至是为了在众多企业中脱颖而出,他们会主动寻求全面的企业解决方案.但是由于行业的快速发展,需求的不断增长,市面上的智能软件层出不穷,这也给了企业选择的困难. ...

  7. android PopupWindow实现从底部弹出或滑出选择菜单或窗口

    本实例弹出窗口主要是继承PopupWindow类来实现的弹出窗体,布局可以根据自己定义设计.弹出效果主要使用了translate和alpha样式实现,具体实习如下: 第一步:设计弹出窗口xml: &l ...

  8. storm 随机发送字符串

    Storm的程序叫做Topology,类似MapReduce job 一个Topolog应该有Spout,代表数据源,和若干个bolt 首先写一个Spout public class RandomSp ...

  9. tomcat部署方法总结

    可以参考之前的:http://www.cnblogs.com/youxin/archive/2013/01/18/2865814.html 在Tomcat中部署Java Web应用程序有两种方式:静态 ...

  10. 根据搜素的字符串改变label包含该字符串的文字

    http://www.2cto.com/kf/201504/391811.html NSString *text =@"人生若只如初见"; //判断字符串所在的位置,并不区分大小写 ...