当前位置:Gxlcms > asp.net > .NET中如何将文本文件的内容存储到DataSet

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

时间:2021-07-01 10:21:17 帮助过:18人阅读

前言

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

示例代码

  1. private DataSet _iifSet;
  2. /// <summary>
  3. /// 将文本文件转化为DataSet
  4. /// </summary>
  5. /// <param name="filePath"></param>
  6. /// <returns></returns>
  7. public DataSet Parse(string filePath)
  8. {
  9.         if (string.IsNullOrEmpty(filePath))
  10.         {
  11.           throw new ArgumentNullException(filePath);
  12.         }
  13. try
  14. {
  15. _iifSet = new DataSet();
  16. var fileText = System.IO.File.ReadAllText(filePath);
  17. var lines = fileText.Split('\n');
  18. CreateTables(lines, _iifSet);
  19. FillSet(lines, _iifSet);
  20. return _iifSet;
  21. }
  22. catch (IOException ex)
  23. {
  24. throw new IOException(ex.Message);
  25. }
  26. }
  27. /// <summary>
  28. /// 读取行数组并将其解析为数据集的表
  29. /// </summary>
  30. /// <param name="lines">String iif文件中的行数组</param>
  31. /// <param name="set"></param>
  32. private void FillSet(IReadOnlyList<string> lines, DataSet set)
  33. {
  34. for (var i = 0; i < lines.Count; i++)
  35. {
  36. if (IsTableHeader(lines[i]))
  37. {
  38. continue;
  39. }
  40. if (lines[i] == "" || lines[i] == "\r" || lines[i] == "\n\r" || lines[i] == "\n")
  41. {
  42. continue;
  43. }
  44. if (lines[i].IndexOf(";__IMPORTED__", StringComparison.Ordinal) != -1)
  45. {
  46. continue;
  47. }
  48. var line = lines[i];
  49. while (!IsFullLine(line, set))
  50. {
  51. i++;
  52. line += lines[i];
  53. }
  54. ParseRecord(line, set);
  55. }
  56. }
  57. /// <summary>
  58. /// 解析记录
  59. /// </summary>
  60. /// <param name="line"></param>
  61. /// <param name="set"></param>
  62. private void ParseRecord(string line, DataSet set)
  63. {
  64. if (IsTableHeader(line))
  65. {
  66. return;
  67. }
  68. var tablename = line.Split('\t')[0];
  69. var parameters = CreateDataRowParams(line, set.Tables[tablename].Columns.Count);
  70. if (parameters.Length > 0)
  71. set.Tables[tablename].Rows.Add(parameters);
  72. }
  73. private bool IsFullLine(string line, DataSet set)
  74. {
  75. if (IsTableHeader(line))
  76. {
  77. return true;
  78. }
  79. var values = line.Split('\t').Length;
  80. var tableName = line.Split('\t')[0];
  81. var columns = set.Tables[tableName].Columns.Count;
  82. return values >= columns;
  83. }
  84. private bool IsTableHeader(string tab)
  85. {
  86. return tab.StartsWith("!");
  87. }
  88. /// <summary>
  89. /// 创建datatable
  90. /// </summary>
  91. /// <param name="lines"></param>
  92. /// <param name="set"></param>
  93. private void CreateTables(IReadOnlyList<string> lines, DataSet set)
  94. {
  95. foreach (var t in lines.Where(IsTableHeader))
  96. {
  97. set.Tables.Add(CreateTable(t));
  98. }
  99. }
  100. private DataTable CreateTable(string line)
  101. {
  102. var values = line.Split('\t');
  103. values[0] = values[0].Substring(1);
  104. var dt = new DataTable(values[0]);
  105. values[0] = null;
  106. foreach (var name in values)
  107. {
  108. if (string.IsNullOrEmpty(name))
  109. continue;
  110. var dc = new DataColumn(name, typeof(string));
  111. try
  112. {
  113. dt.Columns.Add(dc);
  114. }
  115. catch (DuplicateNameException)
  116. {
  117. dc = new DataColumn(name + "_duplicateCol" + dt.Columns.Count);
  118. dt.Columns.Add(dc);
  119. }
  120. }
  121. return dt;
  122. }
  123. public string GetTableName(string line)
  124. {
  125. var values = line.Split('\t');
  126. if (values[0].StartsWith("!"))
  127. {
  128. values[0] = values[0].Substring(1);
  129. }
  130. return values[0];
  131. }
  132. public readonly static object[] EmptyStringArray = { };
  133. private object[] CreateDataRowParams(string line, int maxLength)
  134. {
  135. var raw = line.Split('\t');
  136. var length = raw.Length - 1;
  137. if (length == 0 || maxLength == 0)
  138. return EmptyStringArray;
  139. if (length > maxLength)
  140. length = maxLength;
  141. var values = new string[length];
  142. for (var i = 0; i < length; i++)
  143. {
  144. values[i] = raw[i + 1];
  145. }
  146. if (values[values.Length - 1].EndsWith("\n"))
  147. {
  148. values[values.Length - 1] = values[values.Length - 1].Substring(0, values[values.Length - 1].LastIndexOf('\n'));
  149. }
  150. else if (values[values.Length - 1].EndsWith("\n\r"))
  151. {
  152. values[values.Length - 1] = values[values.Length - 1].Substring(0, values[values.Length - 1].LastIndexOf("\n\r", StringComparison.Ordinal));
  153. }
  154. else if (values[values.Length - 1].EndsWith("\r"))
  155. {
  156. values[values.Length - 1] = values[values.Length - 1].Substring(0, values[values.Length - 1].LastIndexOf('\r'));
  157. }
  158. return values;
  159. }
  160. protected virtual void Dispose(bool cleanAll)
  161. {
  162. _iifSet?.Dispose();
  163. }
  164. public void Dispose()
  165. {
  166. Dispose(true);
  167. GC.SuppressFinalize(this);
  168. }

总结

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

人气教程排行