最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:懂视网 责编:小采 时间:2020-11-27 22:36:22
文档

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

.NET中如何将文本文件的内容存储到DataSet:前言 项目中对文本文件的操作比较简单,但是如果需要将文本文件的内容写入系统的缓存中,操作起来,会稍微的繁琐一些。现在总结一个较为通用的方法,将文本文件的内容缓存进入DataSet数据集中。下面话不多说了,我们直接来看示例代码吧。 示例代码 priv
推荐度:
导读.NET中如何将文本文件的内容存储到DataSet:前言 项目中对文本文件的操作比较简单,但是如果需要将文本文件的内容写入系统的缓存中,操作起来,会稍微的繁琐一些。现在总结一个较为通用的方法,将文本文件的内容缓存进入DataSet数据集中。下面话不多说了,我们直接来看示例代码吧。 示例代码 priv

前言

项目中对文本文件的操作比较简单,但是如果需要将文本文件的内容写入系统的缓存中,操作起来,会稍微的繁琐一些。现在总结一个较为通用的方法,将文本文件的内容缓存进入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的一些常用的操作,基本属性和方法在这里就不做介绍了。希望本文的内容对大家的学习或者工作能带来一定的帮助。

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

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

.NET中如何将文本文件的内容存储到DataSet:前言 项目中对文本文件的操作比较简单,但是如果需要将文本文件的内容写入系统的缓存中,操作起来,会稍微的繁琐一些。现在总结一个较为通用的方法,将文本文件的内容缓存进入DataSet数据集中。下面话不多说了,我们直接来看示例代码吧。 示例代码 priv
推荐度:
标签: 保存到 文件 中的
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top