用C#写的读写CSV文件

用C#写的读取CSV文件的源代码

CSV文件的格子中包含逗号,引号,换行等,都能轻松读取,而且可以把数据转化成DATATABLE格式

 

using System;
using System.Text;
using System.Collections;
using System.IO;
using System.Data;
using System.Text.RegularExpressions;
using System.Diagnostics;

namespace CsvLib
{
 #region 类说明信息

 /// <summary>
 ///  <DL>
 ///  <DT><b>读CSV文件类,读取指定的CSV文件,可以导出DataTable</b></DT>
 ///   <DD>
 ///    <UL> 
 ///    </UL>
 ///   </DD>
 ///  </DL>
 ///  <Author>yangzhihong</Author>   
 ///  <CreateDate>2006/01/16</CreateDate>
 ///  <Company></Company>
 ///  <Version>1.0</Version>
 /// </summary>
 #endregion
 public class CsvStreamReader
 {
  private  ArrayList  rowAL;        //行链表,CSV文件的每一行就是一个链
  private  string  fileName;       //文件名

  private  Encoding encoding;       //编码

  public CsvStreamReader()
  {
   this.rowAL = new ArrayList();   
   this.fileName = "";
   this.encoding = Encoding.Default;
  }

  /// <summary>
  ///
  /// </summary>
  /// <param name="fileName">文件名,包括文件路径</param>
  public CsvStreamReader(string fileName)
  {
   this.rowAL = new ArrayList();    
   this.fileName = fileName;
   this.encoding = Encoding.Default;
   LoadCsvFile();
  }

  /// <summary>
  ///
  /// </summary>
  /// <param name="fileName">文件名,包括文件路径</param>
  /// <param name="encoding">文件编码</param>
  public CsvStreamReader(string fileName,Encoding encoding)
  {
   this.rowAL = new ArrayList();  
   this.fileName = fileName;
   this.encoding = encoding;
   LoadCsvFile();
  }

  /// <summary>
  /// 文件名,包括文件路径
  /// </summary>
  public string FileName
  {
   set
   {
    this.fileName = value;
    LoadCsvFile();
   }
  }

  /// <summary>
  /// 文件编码
  /// </summary>

  public Encoding FileEncoding
  {
   set
   {
    this.encoding = value;
   }
  }

  /// <summary>
  /// 获取行数
  /// </summary>
  public int RowCount
  {
   get
   {
    return this.rowAL.Count;
   }
  }

  /// <summary>
  /// 获取列数
  /// </summary>
  public int ColCount
  {
   get
   {
    int maxCol;

    maxCol = 0;
    for (int i = 0;i<this.rowAL.Count;i++)
    {
     ArrayList colAL = (ArrayList) this.rowAL[i];

     maxCol = (maxCol > colAL.Count)?maxCol:colAL.Count;
    }

    return maxCol;
   }
  }


  /// <summary>
  /// 获取某行某列的数据

  /// row:行,row = 1代表第一行

  /// col:列,col = 1代表第一列  
  /// </summary>
  public string this[int row,int col]
  {
   get
   {   
    //数据有效性验证

    CheckRowValid(row);
    CheckColValid(col);
    ArrayList colAL = (ArrayList) this.rowAL[row-1];

    //如果请求列数据大于当前行的列时,返回空值

    if (colAL.Count < col)
    {
     return "";
    }
    
                return colAL[col-1].ToString();    
   }
  }


  /// <summary>
  /// 根据最小行,最大行,最小列,最大列,来生成一个DataTable类型的数据

  /// 行等于1代表第一行

  /// 列等于1代表第一列

  /// maxrow: -1代表最大行
  /// maxcol: -1代表最大列
  /// </summary>
  public DataTable this[int minRow,int maxRow,int minCol,int maxCol]
  {
   get
   {
    //数据有效性验证

    CheckRowValid(minRow);
    CheckMaxRowValid(maxRow);
    CheckColValid(minCol);
    CheckMaxColValid(maxCol);
    if (maxRow == -1)
    {
     maxRow = RowCount;
    }
    if (maxCol == -1)
    {
     maxCol 

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值