• 欢迎访问交通人网站!
  • 分享一款小游戏:信任的进化
  •    发表于10年前 (2016-02-27)  热点资讯 |   抢沙发  3457 
    文章评分 2 次,平均分 4.5

    关于 CSV 文件

    CSV,全称Comma-Separated Values,即逗号分隔值(或字符分隔值),它是一种以逗号等符号间隔的数据文件格式,可用于存放不带公式和格式的电子表格。CSV文件可以使用Excel软件打开和编辑。因为CSV文件的本质是TXT文件,因此可以使用《C#:读写TXT文件》一文介绍的方法对其进行读写操作。

    之所以介绍CSV文件,是因为目前要在C#中输出Excel文件(xls、xlsx)是一件比较麻烦的事。相比之下,CSV文件输出操作简单,输出行数无限制(xls格式最大65,536行,xlsx格式最大1,048,576行),且可以使用Excel打开。

    写 CSV 文件

    public static void SaveCSV(DataTable dt, string fullPath)
     {
     FileInfo fi = new FileInfo(fullPath);
     if (!fi.Directory.Exists)
     {
     fi.Directory.Create();
     }
     FileStream fs = new FileStream(fullPath, FileMode.Create, FileAccess.Write);
     StreamWriter sw = new StreamWriter(fs, Encoding.Default);
     string data = string.Empty;
     //输出列名称
     for (int i = 0; i < dt.Columns.Count; i++)
     {
     data += dt.Columns[i].ColumnName.ToString()+",";
     }
     data = data.Substring(0,data.Length-1);
     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();
     str = str.Replace("\"", "\"\"");//替换英文引号
     if (str.Contains(',') || str.Contains('"') || str.Contains('\r') || str.Contains('\n')) //含逗号、引号、换行符的需要放到引号中
     {
     str = string.Format("\"{0}\"", str);
     }
    data += str;
     if (j < dt.Columns.Count - 1)
     {
     data += ",";
     }
     }
     sw.WriteLine(data);
     }
     sw.Close();
     fs.Close();
     }

    读 CSV 文件

    public static DataTable ReadCSV(string filePath)
    {
    DataTable dt = new DataTable();
    FileStream fs = new FileStream(filePath, FileMode.Open,FileAccess.Read);
    StreamReader sr = new StreamReader(fs, Encoding.Default);
    //记录每次读取的一行记录
    string strLine = string.Empty;
    //记录每行记录中的各字段内容
    string[] aryLine = 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++)
    {
    DataColumn dc = new DataColumn(tableHead[i]);
    dt.Columns.Add(dc);
    }
    }
    else
    {
    aryLine = strLine.Split(',');
    DataRow dr = dt.NewRow();
    for (int j = 0; j < columnCount; j++)
    {
    dr[j] = aryLine[j];
    }
    dt.Rows.Add(dr);
    }
    }
    sr.Close();
    fs.Close();
    return dt;
    }
    

    注意事项

    在函数 SaveCSV() 中,由于考虑了单引号、逗号部分特殊符号量的输出,因此流程与纯文本的输出稍有差异。具体来说,如果某单元格的原始数据为 Hi,test"14",在写 CSV 文件时应输出为 "Hi,test""14""",这样才能确保在 Excel 中有正确的显示。

    C#:如何读写 CSV 文件

    鉴于符号组合的复杂性,在函数 ReadCSV() 中,并没有考虑特殊符号。因此,ReadCSV() 仅适合读入简单的逗号分隔文件,这是本文提供的读 CSV 文件的方法的局限所在。

     

    除特别注明外,本站所有文章均为交通人原创,转载请注明出处来自http://www.hijtr.com/csharp-csv/

    交通人博客是交通人工作室(JTR Studio)建立的交通人系列网站之一,是交通人工作室的主阵地,旨在整合和分享交通行业相关资讯,具体包括但不限于行业新闻、行业动态,以及行业相关规范、书籍、报告和软件等资源。

    发表评论

    表情 格式

    暂无评论

    
    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享