CSV文件解释代码
来源:互联网 发布:长春盘古网络咋样 编辑:程序博客网 时间:2024/06/10 19:58
CSV文档规则
1:数据使用逗号分隔;
2:内容中可以包括用于分隔数据的逗号,此类数据使用双引号括起;
3:数据中如果包括双引号,需要使用两个双引号;
代码中没有使用Remove和Substring等函数对源串进行处理,而是使用了索引来定位字符串值。
下面的代码将CSV文件解释出的数据存放到DataTable中以便使用。附计算的活动图。
/// <summary> /// csv文件解释 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnCallcsv_Click(object sender, EventArgs e) { FileStream fileStream = new FileStream(@"D:\temp\a.csv", FileMode.Open, FileAccess.Read, FileShare.None); //标识读取的是否是第一行,第一行是列名 bool columnFlag = true; //定义新数据行 string strLine = null; DataTable table = new DataTable(); using (StreamReader sr = new StreamReader(fileStream, System.Text.Encoding.GetEncoding("gb2312"))) { while (!mysr.EndOfStream) { strLine = mysr.ReadLine(); if (!string.IsNullOrEmpty(strLine)) { //lihx 2013年4月7日 实际上这里会有问题,因为CSV中,使用“”括起来的内容包括“,”的时候,逗号不被解释为分隔符,比如:“"2-邮局汇款,"” //读取第一行,作为列名 if (columnFlag) { columnFlag = false; int lineStartIndex = 0; while (lineStartIndex < strLine.Length) { table.Columns.Add(getSPValue(sr, ref lineStartIndex, ref strLine)); } } else { //初始化新行,并放入table中 int itemIndex = 0; int lineStartIndex = 0; object[] items = new object[table.Columns.Count]; while (lineStartIndex < strLine.Length && itemIndex < items.Length) { items[itemIndex++] = getSPValue(sr, ref lineStartIndex, ref strLine); } table.Rows.Add(items); } } } } }}
private static string getSPValue(StreamReader sr, ref int lineStartIndex, ref string strLine){int spIndex = lineStartIndex;if (lineStartIndex >= strLine.Length){return string.Empty;}if (strLine[spIndex] == '\"'){lineStartIndex++;int tmpIndex = -1;while ((tmpIndex = strLine.IndexOf("\"", spIndex + 1)) == -1){string nextLine = sr.ReadLine();strLine += "\n" + nextLine;}spIndex = tmpIndex;if (spIndex == -1){spIndex = strLine.Length;}}spIndex = strLine.IndexOf(",", spIndex);if (spIndex == -1){spIndex = strLine.Length;}if (lineStartIndex > -1 && lineStartIndex < strLine.Length){string tmpValue = strLine.Substring(lineStartIndex, spIndex - lineStartIndex);if (tmpValue != null && tmpValue.Length > 1 && tmpValue.StartsWith("\"") && tmpValue.EndsWith("\"")){tmpValue = tmpValue.Substring(1, tmpValue.Length - 2);if (tmpValue.Length > 0){tmpValue = tmpValue.Replace("\"\"", "\"");}}//考虑到性能不建议使用以下截串的算法。//strline = strline.Substring(spIndex + 1);lineStartIndex = spIndex + 1;return tmpValue;}lineStartIndex = spIndex + 1;return string.Empty;}
- CSV文件解释代码
- 下载CSV文件代码
- java解析csv 文件代码
- Java生成csv文件代码
- jquery.csv 分享一款jquery加载csv文件的代码
- 一段Parsec CSV文件的haskell代码
- 如何解析CSV文件的示例代码
- AndroidManifest.xml文件代码解释
- java代码实现CSV文件读取、将数据拆分成多个CSV文件及数据导出到CSV文件
- 代码第二版,可以写入txt文件,csv文件
- CSV 文件
- csv文件
- CSV文件
- CSV文件
- csv文件
- CSV文件
- csv文件
- CSV文件
- dm37xx android2.3.4增加recovery升级功能(二)——调试
- 【辅助工具】20款优秀的移动产品原型和线框图设计工具
- Android Wifi的工作流程
- CUDA与Open CL 的关系
- Spring MVC学习(四)-------Controller接口控制器详解6
- CSV文件解释代码
- hadoop远程调试
- 深入理解C#委托及原理
- 如何提高tableView的性能
- gson的@Expose注解和@SerializedName注解
- IE和Firefox在JavaScript方面的兼容性小结(收集)
- 搜集的Vim IDE环境配置的文章
- 大数相加(代码错误,求改正)
- 七周七语言 Erlang第一天编程习题解答