• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#完美读取CSV

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
       /// <summary>
        /// 将DataTable中数据写入到CSV文件中
        /// </summary>
        /// <param name="dt">提供保存数据的DataTable</param>
        /// <param name="fileName">CSV的文件路径</param>
        public static bool SaveCSV(DataTable dt, string fullPath)
        {
            try
            {
                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 = string.Format("\"{0}\"", str);
                        data += str;
                        if (j < dt.Columns.Count - 1)
                        {
                            data += ",";
                        }
                    }
                    sw.WriteLine(data);
                }
                sw.Close();
                fs.Close();
                return true;
            }
            catch
            {
                return false;
            }
        }
        /// <summary>
        /// 读取CSV文件到DataTable中
        /// </summary>
        /// <param name="filePath">CSV的文件路径</param>
        /// <returns></returns>
        public static DataTable ReadCSV(string filePath)
        {
            DataTable dt = new DataTable();
            int lineNumber = 0;
            using (CsvFileReader reader = new CsvFileReader(filePath))
            {
                CsvRow row = new CsvRow();
                while (reader.ReadRow(row))
                {
 
                    if (0 == lineNumber)
                    {
                        foreach (string s in row)
                        {
                            dt.Columns.Add(s.Replace("\"", ""));
                        }
                    }
                    else
                    {
                        int index = 0;
                        DataRow dr = dt.NewRow();
                        foreach (string s in row)
                        {
                            dr[index] = s.Replace("\"", "");
                            index++;
                        }
                        dt.Rows.Add(dr);
                    }
                    lineNumber++;
                }
            }
            return dt;
        }

public class CsvRow : List<string>     {         public string LineText { get; set; }     }     public class CsvFileReader : StreamReader     {         public CsvFileReader(Stream stream)             : base(stream)         {         }         public CsvFileReader(string filename)             : base(filename)         {         }         /// <summary>           /// Reads a row of data from a CSV file           /// </summary>           /// <param name="row"></param>           /// <returns></returns>           public bool ReadRow(CsvRow row)         {             row.LineText = ReadLine();             if (String.IsNullOrEmpty(row.LineText))                 return false;             int pos = 0;             int rows = 0;             while (pos < row.LineText.Length)             {                 string value;                 // Special handling for quoted field                   if (row.LineText[pos] == '"')                 {                     // Skip initial quote                       pos++;                     // Parse quoted value                       int start = pos;                     while (pos < row.LineText.Length)                     {                         // Test for quote character                           if (row.LineText[pos] == '"')                         {                             // Found one                               pos++;                             // If two quotes together, keep one                               // Otherwise, indicates end of value                               if (pos >= row.LineText.Length || row.LineText[pos] != '"')                             {                                 pos--;                                 break;                             }                         }                         pos++;                     }                     value = row.LineText.Substring(start, pos - start);                     value = value.Replace("\"\"", "\"");                 }                 else                 {                     // Parse unquoted value                       int start = pos;                     while (pos < row.LineText.Length && row.LineText[pos] != ',')                         pos++;                     value = row.LineText.Substring(start, pos - start);                 }                 // Add field to list                   if (rows < row.Count)                     row[rows] = value;                 else                     row.Add(value);                 rows++;                 // Eat up to and including next comma                   while (pos < row.LineText.Length && row.LineText[pos] != ',')                     pos++;                 if (pos < row.LineText.Length)                     pos++;             }             // Delete any unused items               while (row.Count > rows)                 row.RemoveAt(rows);             // Return true if any columns read               return (row.Count > 0);         }     }

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
数据库安装文件制作(C#)发布时间:2022-07-10
下一篇:
用C#实现哈希算法MD5和SHA1发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap