C# CSV 文件读取的三种方式分析

1 、文件流 + 字符串分割(“,”),缺点:数据中如果有“,”,会出现分割错误。

public DataTable readCsvSql(string filepath)
{
    FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
    StreamReader sr = new StreamReader(fs, Encoding.GetEncoding("gb2312"));
    //记录每次读取的一行记录
    string strLine = null;
    //记录每行记录中的各字段内容
    string[] arrayLine = null;
    //分隔符
    string[] separators = { ",","\t"};
    //逐行读取CSV文件
    while ((strLine = sr.ReadLine()) != null)
    {
         //去除头尾空格
          strLine = strLine.Trim();
          //分隔字符串,返回数组
          arrayLine = strLine.Split(separators, StringSplitOptions.RemoveEmptyEntries);

          // arrayLine  就是需要的数据
    }
}
                    

2、  读取数据库表方式

缺点:不同系统上的 Provider 值不一样,没法大面积使用 (Provider=Microsoft.Jet.OLEDB.4.0; 这个在win7上可行,网上说win11有问题)

 public DataTable readCsvSql(string filepath)
        {
            DataTable dt = new DataTable();
            try
            {
                string directory = Path.GetDirectoryName(filepath);
                string file = Path.GetFileName(filepath);

                if (file.Trim().ToUpper().EndsWith("CSV"))//判断所要读取的扩展名
                {
                    string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + directory + ";Extended Properties='text;HDR=NO;FMT=Delimited'";//有列的读取
                    string commandText = "select * from [" + file + "]";//SQL语句
                    OleDbConnection olconn = new OleDbConnection(connStr);
                    olconn.Open();
                    OleDbDataAdapter odp = new OleDbDataAdapter(commandText, olconn);
                    odp.Fill(dt);
                    olconn.Close();
                    odp.Dispose();
                    olconn.Dispose();
                }
                else
                {
                    //  异常处理
                }
            }
            catch (Exception ex)
            {
                //  异常处理
            }

            return dt;
        }

3. 使用 FileIO.TextFieldParser读取, 我现在就采用这个方法,暂时没发现问题 。


        private void ReadCSVFile(string strCsvFilePath)
        {
            using (Microsoft.VisualBasic.FileIO.TextFieldParser csvReader = new Microsoft.VisualBasic.FileIO.TextFieldParser(strCsvFilePath, Encoding.GetEncoding("gb2312")))
            {
                csvReader.SetDelimiters(new string[] { "," });
                csvReader.HasFieldsEnclosedInQuotes = true;
                csvReader.TrimWhiteSpace = true;
                // 跳过标题行(如果有)
                //csvReader.ReadLine();

                while (!csvReader.EndOfData)
                {
                    string[] arrayLine = csvReader.ReadFields();                
                    // arrayLine 中就是每行的数据

                }  
            }
        }

相关推荐

  1. C# CSV 文件方式分析

    2024-03-30 21:18:04       19 阅读
  2. 【Digester解析XML文件方式

    2024-03-30 21:18:04       31 阅读
  3. Git方法从远程仓库拉指定分支

    2024-03-30 21:18:04       37 阅读
  4. Rust csv文件

    2024-03-30 21:18:04       24 阅读
  5. python入门,文件编码,,写入,追加

    2024-03-30 21:18:04       37 阅读
  6. Linux修改文件名常见方式

    2024-03-30 21:18:04       26 阅读
  7. linux修改文件方法有哪些

    2024-03-30 21:18:04       31 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-30 21:18:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-30 21:18:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-30 21:18:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-30 21:18:04       18 阅读

热门阅读

  1. LeetCode 3&&125

    2024-03-30 21:18:04       16 阅读
  2. vue 侦听器

    2024-03-30 21:18:04       21 阅读
  3. 代码随想录算法训练营 Day34 贪心算法3

    2024-03-30 21:18:04       16 阅读
  4. 简单理解session和cookie

    2024-03-30 21:18:04       15 阅读
  5. mybatis-plus

    2024-03-30 21:18:04       16 阅读
  6. 服务器硬件基础知识

    2024-03-30 21:18:04       13 阅读
  7. 还原二叉树

    2024-03-30 21:18:04       16 阅读
  8. Python基础入门 --- 8.文件

    2024-03-30 21:18:04       17 阅读
  9. Redisson 实现分布式锁

    2024-03-30 21:18:04       22 阅读
  10. 浅谈Spring中的JoinPoint MethodSignature Signature

    2024-03-30 21:18:04       16 阅读