一个读写csv文件的C#类

CSV(Comma-Separated Values )文件即用逗号分隔的文本文件。
下面是用C#写的一个简单的读写CSV文件的类。

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;

namespace CSVDemo
{
    /// <summary>
    /// CSVUtil is a helper class handling csv files.
    /// </summary>
    public class CSVUtil
    {
        private CSVUtil()
        {
        }
        //write a new file, existed file will be overwritten
        public static void WriteCSV(string filePathName,List<String[]>ls)
        {
            WriteCSV(filePathName,false,ls);
        }
        //write a file, existed file will be overwritten if append = false
        public static void WriteCSV(string filePathName,bool append, List<String[]> ls)
        {
            StreamWriter fileWriter=new StreamWriter(filePathName,append,Encoding.Default);
            foreach(String[] strArr in ls)
            {
                fileWriter.WriteLine(String.Join (“,",strArr) );
            }
            fileWriter.Flush();
            fileWriter.Close();
           
        }
        public static List<String[]> ReadCSV(string filePathName)
        {
            List<String[]> ls = new List<String[]>();
            StreamReader fileReader=new   StreamReader(filePathName); 
            string strLine="";
            while (strLine != null)
            {
                strLine = fileReader.ReadLine();
                if (strLine != null && strLine.Length>0)
                {
                    ls.Add(strLine.Split(','));
                    //Debug.WriteLine(strLine);
                }
            }
            fileReader.Close();
            return ls;
        }
       
    }
}
如何使用这个类可以看源代码。下载文件CSVDemo.rar (12.76 KB , 下载:834次)
源代码演示了:
1.listview控件,openFileDialog控件的简单运用;
2.autoseed的Random类的使用;
3.保存CSV文件;
4.读取CSV文件;
5.简单的分层思想,视图-listview,业务数据-data,永久数据-csv file
本代码不涉及:
1.listview控件的复杂控制
2.CSV文件内容合法性检验,例如每行是否有相同的列。
Update
2007-12-14  一个不简单的处理csv文件的C#类(库)
http://www.codeproject.com/KB/database/CsvReader.aspx
我没有用过,连下载都没有,因为我用不着,也许某一天会有用。
2008-1-14 按游客的指点修改了WriteCSV,精简了代码,Demo的代码也已更新。
标签: CSV文件
评论: 7 | 引用: 0 | 阅读: 2133
  • 1 
水边 [ 2008-01-04 12:33 | 回复 | 编辑 删除 ]
这个是有问题的,如果用Excel 编辑CSV文件,且内容中有逗号,得到的csv文件如下:
"aaa,aaa",bbb,ccc

那用split(',')就不行了。
王者之剑 [ 回复于2008-01-04 23:39 网址 | 编辑 删除 ]
嗯,所以提供了一个不简单的类(库)的链接,有兴趣可以参考。
不管多复杂的文件,整个处理过程是相似的不过是将
ls.Add(strLine.Split(','));
改成
ls.Add(ProcessLine(strLine))罢了
特殊的情况其实还有项目中含有引号,换行等情况,如果含有换行,用上面的方法也处理不了了,可能需要一个字符一个字符处理。
王者之剑 [ 2008-01-04 23:44 网址 | 回复 | 编辑 删除 ]
把源代码贴出来就是让觉得不行的人不用下载示例,看来这个目的是达到了,有一大半的人没有下载。
游客 [ 2008-01-14 19:23 | 回复 | 编辑 删除 ]
string.Join(",", strArr)
方便些吧.....
王者之剑 [ 回复于2008-01-14 21:30 网址 | 编辑 删除 ]
谢谢指点,已改正
jerjo [ 2008-10-23 09:45 | 回复 | 编辑 删除 ]
特殊的情况其实还有项目中含有引号,换行等情况,如果含有换行,用上面的方法也处理不了了,可能需要一个字符一个字符处理。

我现在就碰到这个问题,怎么办呢?
王者之剑 [ 回复于2008-10-23 10:11 网址 | 编辑 删除 ]
看看文章最后给出的链接吧,那个能够处理复杂的CSV文件,看能不能解决你的问题
  • 1 
发表评论
昵 称: (必须)
密 码: (未注册用户可不填)
网 址: 邮 箱:
验证码: 验证码图片 选 项:
头 像:
内 容: