.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的一些常用的操作,基本属性和方法在这里就不做介绍了。希望本文的内容对大家的学习或者工作能带来一定的帮助。