zoukankan      html  css  js  c++  java
  • C#完美读取CSV

           /// <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);         }     }
  • 相关阅读:
    python基础学习文件内容的操作
    python基础学习字符串操作
    python基础学习运算符
    python基础学习列表
    centos一键安装nginx
    centos6添加整段多IP脚本
    Ubuntu 添加整段多IP脚本
    安装python2.7
    两位float型的小数相加,不会变成两位小时的处理方法
    mysql 5.7 执行group by 语句报错
  • 原文地址:https://www.cnblogs.com/jameslif/p/6117193.html
Copyright © 2011-2022 走看看