项目中比较多的会对文件进行操作,例如文件的上传下载,文件的压缩和解压等IO操作。在.NET项目中较多的会使用DataSet,DataTable进行数据的缓存。

项目中对文本文件的操作比较简单,但是如果需要将文本文件的内容写入系统的缓存中,操作起来,会稍微的繁琐一些。现在总结一个较为通用的方法,将文本文件的内容缓存进入DataSet数据集中。

private DataSet _iifSet;/// <summary>/// 将文本文件转化为DataSet/// </summary>/// <param name="filePath"></param>/// <returns></returns>public DataSet Parse(string filePath){if (string.IsNullOrEmpty(filePath)){throw new ArgumentNullException(filePath);}
try{_iifSet = new DataSet();var fileText = System.IO.File.ReadAllText(filePath);var lines = fileText.Split('\n');CreateTables(lines, _iifSet);FillSet(lines, _iifSet);return _iifSet;}catch (IOException ex){throw new IOException(ex.Message);}}/// <summary>/// 读取行数组并将其解析为数据集的表/// </summary>/// <param name="lines">String iif文件中的行数组</param>/// <param name="set"></param>private void FillSet(IReadOnlyList<string> lines, DataSet set){for (var i = 0; i < lines.Count; i++){if (IsTableHeader(lines[i])){continue;}if (lines[i] == "" || lines[i] == "\r" || lines[i] == "\n\r" || lines[i] == "\n"){continue;}if (lines[i].IndexOf(";__IMPORTED__", StringComparison.Ordinal) != -1){continue;}var line = lines[i];while (!IsFullLine(line, set)){i++;line += lines[i];}ParseRecord(line, set);}}/// <summary>/// 解析记录/// </summary>/// <param name="line"></param>/// <param name="set"></param>private void ParseRecord(string line, DataSet set){if (IsTableHeader(line)){return;}var tablename = line.Split('\t')[0];var parameters = CreateDataRowParams(line, set.Tables[tablename].Columns.Count);if (parameters.Length > 0)set.Tables[tablename].Rows.Add(parameters);}private bool IsFullLine(string line, DataSet set){if (IsTableHeader(line)){return true;}var values = line.Split('\t').Length;var tableName = line.Split('\t')[0];var columns = set.Tables[tableName].Columns.Count;return values >= columns;}private bool IsTableHeader(string tab){return tab.StartsWith("!");}/// <summary>/// 创建datatable/// </summary>/// <param name="lines"></param>/// <param name="set"></param>private void CreateTables(IReadOnlyList<string> lines, DataSet set){foreach (var t in lines.Where(IsTableHeader)){set.Tables.Add(CreateTable(t));}}private DataTable CreateTable(string line){var values = line.Split('\t');values[0] = values[0].Substring(1);var dt = new DataTable(values[0]);values[0] = null;foreach (var name in values){if (string.IsNullOrEmpty(name))continue;var dc = new DataColumn(name, typeof(string));try{dt.Columns.Add(dc);}catch (DuplicateNameException){dc = new DataColumn(name + "_duplicateCol" + dt.Columns.Count);dt.Columns.Add(dc);}}return dt;}public string GetTableName(string line){var values = line.Split('\t');if (values[0].StartsWith("!")){values[0] = values[0].Substring(1);}return values[0];}public readonly static object[] EmptyStringArray = { };private object[] CreateDataRowParams(string line, int maxLength){var raw = line.Split('\t');var length = raw.Length - 1;if (length == 0 || maxLength == 0)return EmptyStringArray;if (length > maxLength)length = maxLength;var values = new string[length];for (var i = 0; i < length; i++){values[i] = raw[i + 1];}if (values[values.Length - 1].EndsWith("\n")){values[values.Length - 1] = values[values.Length - 1].Substring(0, values[values.Length - 1].LastIndexOf('\n'));}else if (values[values.Length - 1].EndsWith("\n\r")){values[values.Length - 1] = values[values.Length - 1].Substring(0, values[values.Length - 1].LastIndexOf("\n\r", StringComparison.Ordinal));}else if (values[values.Length - 1].EndsWith("\r")){values[values.Length - 1] = values[values.Length - 1].Substring(0, values[values.Length - 1].LastIndexOf('\r'));}return values;}protected virtual void Dispose(bool cleanAll){_iifSet?.Dispose();}public void Dispose(){Dispose(true);GC.SuppressFinalize(this);}

有关dataset的一些常用的操作,基本属性和方法在这里就不做介绍了。

转载于:https://blog.51cto.com/pengze0902/1866305

将文本文件内容存储在DataSet中的方法总结相关推荐

  1. 将hive查询内容存储到文件中

    首先先写一个shell脚本: hql=" " hive -e "$hql" >> 文件名 如果要输出表头: 再加入config config=&qu ...

  2. python数组写入txt文档_Python打开文件,将list、numpy数组内容写入txt文件中的方法...

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  3. 将多个txt文件中的内容写在一个txt中的方法

    import os filename='./train_data/img_' for i in range(1,19736):newfile=filename+str(i)+'.txt'if os.p ...

  4. 如何将EXCEL表格的内容导入到CDR中?

    CDR中能做表格?答案是肯定的,而且方法不止一种,比如利用图纸工具或者表格工具.现在教大家一个更快捷.简单的方法,将Excel表格直接导入到CDR软件,立刻完成你的表格绘制,而且还可以导入内容,并且能 ...

  5. 使用PHPExcel将Excel中的内容存储到数据库

    PHPExcel将.xlsx文件中的内容存储到MySQL数据库 一.PHPExcel下载 PHPExcel下载可以参照我之前发过的文章--Composer安装与PHPWord的下载与使用 查找版本命令 ...

  6. java控制台输出到文件_如何将java控制台的输出内容存入到文本文件中 经典方法...

    如何将java控制台的输出内容存入到文本文件中 经典方法 (2014-04-17 19:27:23) 修改LogWriter类的静态域即可随意切换输出了.main方法中代码不用改变. 代码如下: im ...

  7. java 文件内容读取到字符串中,从文本文件中将字符串值读取到Java中的Jav...

    我想通过分割读取字符串值包括从文本文件到存储到Account类的空白.这是我读取文本文件的功能. public ArrayList loadAccount(String fn) throws IOEx ...

  8. 读取html页面中的txt,教你html读出文本文件内容的方法

    当我们使用移动网络时,滚动条的定制通常会为我们的项目增添许多优雅,那么教你html读出文本文件内容的方法大家都清楚吗?下面就让爱站技术频道小编带你一起来了解一下吧! Function?bytes2BS ...

  9. 数据库-ADONET-在数据集DataSet中使用关系对象DataRelation处理关系

    处理关系数据 数据库中,表很少是独立结构的,大部分数据库都包含相互关联的表. 在构建应用程序时,会遇到--显示或者通过程序设计访问数据库中相关表的数据的情况. 用户会希望,能通过在不同的表之间定位,来 ...

最新文章

  1. JS获取屏幕,浏览器,网页高度宽度
  2. win10找不到局域网Linux,技术员解惑win10系统访问不了NAS和linux网络共享的详细办法...
  3. python语言必背代码-Python新手必须知道的25条知识点
  4. 洛谷1346 电车
  5. [codevs 1237] 餐巾计划问题
  6. YouTube测试购物功能、 2021 最值得效力的科技公司榜单、2020 移动应用年度报告等|Decode the Week...
  7. 当初互联网大佬给的几块钱“羊毛”,现在又要我们加倍还回去!
  8. doc无法编译java文件_java编译成jar文件.doc
  9. C语言车辆管理报告,用c语言编的车辆管理
  10. plsql设置oracle11g,数据库oracle11G,如何通过plsql查询表空间大小,如何通过PLSQL把一个表空间的大小设置成自动扩展...
  11. WannaCry深度详细分析报告 转
  12. PropertyChangeSupport 监听器模式的应用
  13. 干货,下载网易云课堂和B站的视频
  14. C语言实现三子棋游戏
  15. Linux中Bin文件压缩包解压运行
  16. 图普科技李麟|当新零售遇上人工智能
  17. 木子-后端-Java小知识点
  18. 【opencv学习笔记】2用摄像头识别指定颜色
  19. [编程题] 翻转数列--附详细分析思路
  20. python eof是什么_python eoferror是什么异常

热门文章

  1. cmd查看开放的端口
  2. SpringBoot实战(十一):MultipartException: Could not parse multipart servlet request
  3. GitHub热榜第四!这套Python机器学习课,免费获取还易吸收 | 资源
  4. 开源啦:连DeepMind也捉急的游戏,OpenAI给你攻破第一关的高分算法
  5. NIPS不改名再引风波:签名抗议活动开启,大咖纷纷发声支持
  6. AI手机会怎么样?那不得看高通骁龙的AI能怎样
  7. AI戒毒?没错,北京开始这么干了
  8. 纳达尔复出迎澳网开门红 直落三盘横扫本土选手
  9. CentOS7-Python系列】之一【python-devel教训】
  10. 无法识别的属性“decompressionEnabled”处理方法