• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > .NET中如何将文本文件的内容存储到DataSet

.NET中如何将文本文件的内容存储到DataSet

作者:彭泽0902 字体:[增加 减小] 来源:互联网 时间:2017-05-11

彭泽0902通过本文主要向大家介绍了vb.net dataset,.net dataset,ado.net dataset,.net core dataset,dataset等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

前言

项目中对文本文件的操作比较简单,但是如果需要将文本文件的内容写入系统的缓存中,操作起来,会稍微的繁琐一些。现在总结一个较为通用的方法,将文本文件的内容缓存进入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);
  }
</div>

总结

好了,本文的内容到这就结束了,有关dataset的一些常用的操作,基本属性和方法在这里就不做介绍了。希望本文的内容对大家的学习或者工作能带来一定的帮助。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • .NET中如何将文本文件的内容存储到DataSet

相关文章

  • 2017-05-11将文件上传、下载(以二进制流保存到数据库)实现代码
  • 2017-05-11.Net中如何操作IIS的虚拟目录原理分析及实现方案
  • 2018-08-20.net中自定义错误页面的实现升级篇
  • 2018-08-20.NET Core系列之MemoryCache 初识
  • 2017-05-11WebService出现"因 URL 意外地以 结束,请求格式无法识别"的解决方法
  • 2017-05-11全面剖析.Net环境下的缓存技术
  • 2017-05-11asp.net实现图片以二进制流输出的两种方法
  • 2017-05-11asp.net 图标提取以及图标转换的实例代码
  • 2018-08-20ZKEACMS for .Net Core深度解析
  • 2017-05-11控件开发时两种JS嵌入资源方式的使用方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • jenkins部署.net平台自动化构建的方法步骤
    • Hangfire在ASP.NET CORE中的简单实现方法
    • ASP.NET4的自动启动特性浅析
    • 在ASP.NET 2.0中操作数据之六十三:GridView实现批量删除数据
    • 如何在不同.net版本实现单点登录
    • C#语言初级入门介绍
    • Repeater控件实现编辑、更新、删除等操作示例代码
    • asp.net XML文件操作实现代码
    • ASP.NET 在下载文件时对其重命名的思路及实现方法
    • repeater、gridview 在绑定时判断判断显示不同的行样式或文本

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有