小編給大家分享一下.NET中將文本文件的內(nèi)容存儲(chǔ)到DataSet的方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

前言
項(xiàng)目中對(duì)文本文件的操作比較簡(jiǎn)單,但是如果需要將文本文件的內(nèi)容寫入系統(tǒng)的緩存中,操作起來,會(huì)稍微的繁瑣一些。現(xiàn)在總結(jié)一個(gè)較為通用的方法,將文本文件的內(nèi)容緩存進(jìn)入DataSet數(shù)據(jù)集中,我們直接來看示例代碼吧。
示例代碼
private DataSet _iifSet;
/// <summary>
/// 將文本文件轉(zhuǎn)化為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>
/// 讀取行數(shù)組并將其解析為數(shù)據(jù)集的表
/// </summary>
/// <param name="lines">String iif文件中的行數(shù)組</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>
/// 創(chuàng)建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);
}以上是“.NET中將文本文件的內(nèi)容存儲(chǔ)到DataSet的方法”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)頁名稱:.NET中將文本文件的內(nèi)容存儲(chǔ)到DataSet的方法-創(chuàng)新互聯(lián)
當(dāng)前URL:http://chinadenli.net/article2/dgphoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、域名注冊(cè)、關(guān)鍵詞優(yōu)化、ChatGPT、網(wǎng)站收錄、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容