zoukankan      html  css  js  c++  java
  • C# 读取CSV文件

     public class CSVHelper
        {
            /// <summary>
            /// 将DataTable中数据写入到CSV文件中
            /// </summary>
            /// <param name="dt">提供保存数据的DataTable</param>
            /// <param name="fileName">CSV的文件路径</param>
            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, System.IO.FileMode.Create, System.IO.FileAccess.Write);
                //StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);
                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();
                        str = str.Replace(""", """");//替换英文冒号 英文冒号需要换成两个冒号
                        if (str.Contains(',') || str.Contains('"')
                            || str.Contains('
    ') || str.Contains('
    ')) //含逗号 冒号 换行符的需要放到引号中
                        {
                            str = string.Format(""{0}"", str);
                        }
    
                        data += str;
                        if (j < dt.Columns.Count - 1)
                        {
                            data += ",";
                        }
                    }
                    sw.WriteLine(data);
                }
                sw.Close();
                fs.Close();
            }
    
            /// <summary>
            /// 将CSV文件的数据读取到DataTable中
            /// </summary>
            /// <param name="fileName">CSV文件路径</param>
            /// <returns>返回读取了CSV数据的DataTable</returns>
            public static DataTable OpenCSV(string filePath)
            {
                try
                {
                    DataTable dt = new DataTable();
                    FileStream fs = new FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read);
    
                    StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);
                    //记录每次读取的一行记录
                    string strLine = "";
                    //记录每行记录中的各字段内容
                    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);
                        }
                    }
                    //if (aryLine != null && aryLine.Length > 0)
                    //{
                    //    dt.DefaultView.Sort = tableHead[0] + " " + "asc";
                    //}
                    sr.Close();
                    fs.Close();
                    return dt;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
    
            public static Encoding GetFileEncoding(string filePath)
            {
                Encoding Result = null;
                FileInfo info = new FileInfo(filePath);
                FileStream fs = default(FileStream);
                try
                {
                    fs = info.OpenRead();
                    Encoding[] unicodeEncodings =
                    {
                        Encoding.BigEndianUnicode,
                        Encoding.Unicode,
                        Encoding.UTF8,
                        Encoding.UTF32,
                        Encoding.UTF7,
                        new UTF32Encoding(true,true)
                    };
                    for (int i = 0; Result == null && i < unicodeEncodings.Length; i++)
                    {
                        fs.Position = 0;
                        byte[] preamble = unicodeEncodings[i].GetPreamble();
                        bool isEqual = true;
                        for (int j = 0; isEqual && j < preamble.Length; j++)
                        {
                            isEqual = preamble[j] == fs.ReadByte();
                        }
                        if (isEqual)
                            Result = unicodeEncodings[i];
    
                    }
                }
                catch (IOException ex)
                {
                    throw ex;
                }
                finally
                {
                    if (fs != null)
                    {
                        fs.Close();//包括了Dispose,并通过GC强行释放资源
                    }
                }
                if (object.ReferenceEquals(null, Result))
                {
                    Result = Encoding.Default;
                }
                return Result;
            }
    
        }
    

      

  • 相关阅读:
    Oracle 系统表大全
    oracle高效分页存储过程(百万数据级)
    PowerDesigner中name与comment互相转换脚本
    一些web开发中常用的、做成cs文件的js代码
    Ado.net Entity Model 模板出错的修复
    做ssl通道时遇到“请求被中止: 未能创建 SSL/TLS 安全通道”问题的解决方法
    SQLSERVER 2008空间数据库学习(一)
    jquery的全选、全不选、反选例子
    win7 64位下使用oracle ado.net entity framework
    半角/全角互换的代码
  • 原文地址:https://www.cnblogs.com/DONET-LC/p/7486454.html
Copyright © 2011-2022 走看看