.NET中如何将文本文件的内容存储到DataSet
前言
项目中对文本文件的操作比较简单,但是如果需要将文本文件的内容写入系统的缓存中,操作起来,会稍微的繁琐一些。现在总结一个较为通用的方法,将文本文件的内容缓存进入DataSet数据集中。下面话不多说了,我们直接来看示例代码吧。
示例代码
privateDataSet_iifSet; ///<summary> ///将文本文件转化为DataSet ///</summary> ///<paramname="filePath"></param> ///<returns></returns> publicDataSetParse(stringfilePath) { if(string.IsNullOrEmpty(filePath)) { thrownewArgumentNullException(filePath); } try { _iifSet=newDataSet(); varfileText=System.IO.File.ReadAllText(filePath); varlines=fileText.Split('\n'); CreateTables(lines,_iifSet); FillSet(lines,_iifSet); return_iifSet; } catch(IOExceptionex) { thrownewIOException(ex.Message); } } ///<summary> ///读取行数组并将其解析为数据集的表 ///</summary> ///<paramname="lines">Stringiif文件中的行数组</param> ///<paramname="set"></param> privatevoidFillSet(IReadOnlyList<string>lines,DataSetset) { for(vari=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; } varline=lines[i]; while(!IsFullLine(line,set)) { i++; line+=lines[i]; } ParseRecord(line,set); } } ///<summary> ///解析记录 ///</summary> ///<paramname="line"></param> ///<paramname="set"></param> privatevoidParseRecord(stringline,DataSetset) { if(IsTableHeader(line)) { return; } vartablename=line.Split('\t')[0]; varparameters=CreateDataRowParams(line,set.Tables[tablename].Columns.Count); if(parameters.Length>0) set.Tables[tablename].Rows.Add(parameters); } privateboolIsFullLine(stringline,DataSetset) { if(IsTableHeader(line)) { returntrue; } varvalues=line.Split('\t').Length; vartableName=line.Split('\t')[0]; varcolumns=set.Tables[tableName].Columns.Count; returnvalues>=columns; } privateboolIsTableHeader(stringtab) { returntab.StartsWith("!"); } ///<summary> ///创建datatable ///</summary> ///<paramname="lines"></param> ///<paramname="set"></param> privatevoidCreateTables(IReadOnlyList<string>lines,DataSetset) { foreach(vartinlines.Where(IsTableHeader)) { set.Tables.Add(CreateTable(t)); } } privateDataTableCreateTable(stringline) { varvalues=line.Split('\t'); values[0]=values[0].Substring(1); vardt=newDataTable(values[0]); values[0]=null; foreach(varnameinvalues) { if(string.IsNullOrEmpty(name)) continue; vardc=newDataColumn(name,typeof(string)); try { dt.Columns.Add(dc); } catch(DuplicateNameException) { dc=newDataColumn(name+"_duplicateCol"+dt.Columns.Count); dt.Columns.Add(dc); } } returndt; } publicstringGetTableName(stringline) { varvalues=line.Split('\t'); if(values[0].StartsWith("!")) { values[0]=values[0].Substring(1); } returnvalues[0]; } publicreadonlystaticobject[]EmptyStringArray={}; privateobject[]CreateDataRowParams(stringline,intmaxLength) { varraw=line.Split('\t'); varlength=raw.Length-1; if(length==0||maxLength==0) returnEmptyStringArray; if(length>maxLength) length=maxLength; varvalues=newstring[length]; for(vari=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')); } elseif(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)); } elseif(values[values.Length-1].EndsWith("\r")) { values[values.Length-1]=values[values.Length-1].Substring(0,values[values.Length-1].LastIndexOf('\r')); } returnvalues; } protectedvirtualvoidDispose(boolcleanAll) { _iifSet?.Dispose(); } publicvoidDispose() { Dispose(true); GC.SuppressFinalize(this); }
总结
好了,本文的内容到这就结束了,有关dataset的一些常用的操作,基本属性和方法在这里就不做介绍了。希望本文的内容对大家的学习或者工作能带来一定的帮助。