CSV 文件导入到数据库的前奏,判断处理回车符,判断处理文件字符串中出现的逗号,及部分特殊符号
来源:互联网 发布:下载4g网络 编辑:程序博客网 时间:2024/06/07 13:35
项目需求是读取CSV文件,在读取过程中遇到各种特殊情况,比如标题所说,回车符,在列里面出现关键符号(逗号),引号。
以下的类就是专门处理这些特殊情况的。
不喜欢讲太多废话,源码第一。
处理csv文件的类,注释没写,希望各位自己慢慢调试去理解!
using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Web;using System.Text;namespace CSharpLight.Tool{ public class CsvFileReader : StreamReader { public CsvFileReader(Stream stream) : base(stream) { } public CsvFileReader(string filePath) : base(filePath) { } public CsvFileReader(Stream stream, Encoding encoding) : base(stream, encoding) { } public CsvFileReader(string path, Encoding encoding) : base(path, encoding) { } public CsvRow ReadRow() { CsvRow row = new CsvRow(); int pos = 0; bool isHasField = true; bool isFieldStart = false; bool isQuoteStart = false; StringBuilder sb = new StringBuilder(); bool isBreak = false; while (!isBreak) { string line = ReadLine(); if (line == null) { return null; } row.LineText += line; int len = row.LineText.Length; while (pos < len) { #region 循环判断字符 char c = row.LineText[pos]; sb.Append(c); if (c == '"') { if (!isFieldStart) { isQuoteStart = true; } if (isQuoteStart) { isHasField = !isHasField; } } if (c != ' ' && c != '\t' && c != '\n') { isFieldStart = true; } if (isHasField && (c == ',' || pos == len - 1)) { #region 当字段结束时,处理一个字段,并且新建一个字段. var text = sb.ToString() .TrimEnd(',') .Trim(); if (isQuoteStart) { text = text.Trim('"') .Replace("\"\"", "\""); } row.Add(text); sb = new StringBuilder(); isFieldStart = false; isQuoteStart = false; if (pos == len - 1) { isBreak = true; } #endregion } #endregion pos++; } } return row; }
后台使用函数
/// <summary> /// 读取csv标题行 /// </summary> /// <param name="filePath">带文件名称的文件路径</param> /// <param name="titleRow">是否第一行,当 titleRow = true时,则只读第一行(即标题行)</param> /// <returns></returns> public List<CsvRow> CSVRead(string filePath, bool titleRow) { List<CsvRow> vRows = new List<CsvRow>(); using (CsvFileReader reader = new CsvFileReader(filePath, Encoding.Default)) { CsvRow row = null; while ((row = reader.ReadRow()) != null) { vRows.Add(row); if (titleRow) { break; } } } return vRows; }
然后在你需要的地方调用这个函数就行了。
<span style="font-family:Arial;background-color: rgb(255, 255, 255);">如</span>
var list = CSVRead(filePath,false);
0 0
- CSV 文件导入到数据库的前奏,判断处理回车符,判断处理文件字符串中出现的逗号,及部分特殊符号
- csv格式的文件上传下载时,逗号列的处理
- 获取csv文件对逗号和引号的处理
- 如何将数据库的数据导入到csv文件中
- 生成csv文件时内容中包含逗号的处理方式
- 基于Java的CSV格式文件处理(excel逗号分隔符文件)
- excel文件到导入到数据库,date类型的处理
- 把带有逗号的excel文件导入到sqlite数据库
- (原创)关于如何处理EXCEL( CSV)文件 导入数据库的解决方法!!
- CSV文件的转义处理
- CSV文件的转义处理
- C#获取CSV文件内容对逗号和引号分隔的处理
- C#获取CSV文件内容对逗号和引号分隔的处理
- 怎么把CSV文件的导入到数据库中(C#.net VS2005)
- 如何把 .csv 的文件导入数据库SQL SERVER 中!
- 导入文件时的判断
- 批量处理BCP导入文件到数据库
- 各种数据库导入csv文件的方法
- 【LeetCode】Populating Next Right Pointers in Each Node(I and II)
- poj 1250
- 今天遇到的 ccs5 安装问题--failed to install com.ti.....
- php protobuffer
- 数学之美番外篇:平凡而又神奇的贝叶斯方法
- CSV 文件导入到数据库的前奏,判断处理回车符,判断处理文件字符串中出现的逗号,及部分特殊符号
- 人生总是有那么多的第一次,写博客也不例外
- iOS UIWebView 加载https 站点出现NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL,
- UNIX域协议
- 谷歌Web中文开发手册:1目的&目录
- 游戏效率优化(2) 使用const关键字
- Deep learning:五(regularized线性回归练习)
- 更迷你的随身wifi驱动 v1.22 官方版
- Windows 下配置 telnet (win7 32位旗舰版)