项目中比较多的会对文件进行操作,例如文件的上传下载,文件的压缩和解压等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 = ; 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) != -)
{
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')[];
var parameters = CreateDataRowParams(line, set.Tables[tablename].Columns.Count);
if (parameters.Length > )
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')[];
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[] = values[].Substring();
var dt = new DataTable(values[]);
values[] = 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[].StartsWith("!"))
{
values[] = values[].Substring();
}
return values[];
} public readonly static object[] EmptyStringArray = { }; private object[] CreateDataRowParams(string line, int maxLength)
{
var raw = line.Split('\t');
var length = raw.Length - ;
if (length == || maxLength == )
return EmptyStringArray;
if (length > maxLength)
length = maxLength;
var values = new string[length];
for (var i = ; i < length; i++)
{
values[i] = raw[i + ];
} if (values[values.Length - ].EndsWith("\n"))
{
values[values.Length - ] = values[values.Length - ].Substring(, values[values.Length - ].LastIndexOf('\n'));
}
else if (values[values.Length - ].EndsWith("\n\r"))
{
values[values.Length - ] = values[values.Length - ].Substring(, values[values.Length - ].LastIndexOf("\n\r", StringComparison.Ordinal));
}
else if (values[values.Length - ].EndsWith("\r"))
{
values[values.Length - ] = values[values.Length - ].Substring(, values[values.Length - ].LastIndexOf('\r'));
} return values;
} protected virtual void Dispose(bool cleanAll)
{
_iifSet?.Dispose();
} public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}

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

将文本文件的内容存储在DataSet中的方法总结的更多相关文章

  1. 【HANA系列】SAP UI5上传图片 用XSJS存储在HANA中的方法

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP UI5上传图片 用XSJ ...

  2. 哈希算法和字典类的定义,DataSet中数据遍历的几种方法

    哈希算法的基本操作: 1.  哈希表(HashTable)简述   在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似 ...

  3. Java中的方法和方法重载

    上次我们讲了Java中的一些基本的语法;今天我们就讲一点内容,来说说Java中的方法和方法重载以及需要注意的一些地方; 方法: Java的方法类似与其他语言的函数,是一段用来完成特定功能的代码片段, ...

  4. Java基础知识强化之IO流笔记46:IO流练习之 把文本文件中数据存储到集合中的案例

    1.  把文本文件中数据存储到集合中      需求:从文本文件中读取数据(每一行为一个字符串数据)到集合中,并遍历集合. 分析:      通过题目的意思我们可以知道如下的一些内容,      数据 ...

  5. 使用Hive或Impala执行SQL语句,对存储在Elasticsearch中的数据操作

    http://www.cnblogs.com/wgp13x/p/4934521.html 内容一样,样式好的版本. 使用Hive或Impala执行SQL语句,对存储在Elasticsearch中的数据 ...

  6. 将spfile存储在ASM中

    数据库的spfile开始是存储在普通的文件系统中,如下所示: SQL> show parameter spfile NAME TYPE VALUE ----------------------- ...

  7. 使用OpenXML将Excel内容读取到DataTable中

    前言:前面的几篇文章简单的介绍了如何使用OpenXML创建Excel文档.由于在平时的工作中需要经常使用到Excel的读写操作,简单的介绍下使用 OpenXML读取Excel中得数据.当然使用Open ...

  8. ubuntu 把终端信息输出到文本文件中的方法

    方法一:把终端中所有信息都写到文本文件中 在终端的命令行中输入以下命令: $   script   -f    output.txt 这样就会在当前目录下创建一个output.txt文件 接下来,在按 ...

  9. 爬取豆瓣电影TOP 250的电影存储到mongodb中

    爬取豆瓣电影TOP 250的电影存储到mongodb中 1.创建项目sp1 PS D:\scrapy> scrapy.exe startproject douban 2.创建一个爬虫 PS D: ...

随机推荐

  1. Python 之 lamda 函数

    1.例子 语法:lambda [args1,argus2....]:expression map(lambda x: x*x, [y for y in range(10)]) lambda:" ...

  2. CentOS 7 下Docker的安装

    笔者是刚入行1年的新鸟,近期公司开始推Docker技术.这个系列的文章都是基于CentOS7系统下进行讲解的. Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及 ...

  3. SETLOCAL

    Quote from: http://ss64.com/nt/setlocal.html SETLOCAL Set options to control the visibility of envir ...

  4. golang中的reflect包用法

    最近在写一个自动生成api文档的功能,用到了reflect包来给结构体赋值,给空数组新增一个元素,这样只要定义一个input结构体和一个output的结构体,并填写一些相关tag信息,就能使用程序来生 ...

  5. EF 的 CURD 操作

    EF 的 CURD 操作 这里采用了数据库 Northwind,下载地址:https://northwinddatabase.codeplex.com/ 增 /// <summary> / ...

  6. ubuntu18.04搭建nfs

    1.服务端安装 #apt-get update -y #apt-get install -y nfs-kernel-server #apt-get enable nfs-kernel-server 2 ...

  7. WebStorm Error : program path not specified

    1.出现这个错误是由于没有设置Node.js路径引起的. 2.下载安装Node.js. 3.设置对应的路径,设置后点一下Enable按钮即可. 以上,完.

  8. easyui中combobox的值改变onchang事件

    今天在公司里,那jquery中的easy-ui-里面的combobox,真的郁闷死了! 把郁闷的事情记下来,下次就不会犯错了! 首先,肯定少不了,引入jquery的js文件!请大家注意了! 下面是代码 ...

  9. 设计模式之适配器模式(Adapter Pattern)

    在正式开始之前,让我们先思考几个问题: 如果现有的新项目可以利用旧项目里大量的遗留代码,你打算从头开始完成新项目还是去了解旧项目的模块功能以及接口? 如果你了解过遗留代码之后,发现有几个重要的功能模块 ...

  10. centos6 Nginx+Tomcat负载均衡配置

    一.Nginx简介 Nginx是一个web服务器也可以用来做负载均衡及反向代理使用,目前使用最多的就是负载均衡,具体简介我就不介绍了百度一下有很多,下面直接进入安装步骤 二.Nginx安装 1.下载N ...