国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

.NET中如何將文本文件的內(nèi)容存儲到DataSet

2024-07-10 13:31:37
字體:
供稿:網(wǎng)友

前言

項目中對文本文件的操作比較簡單,但是如果需要將文本文件的內(nèi)容寫入系統(tǒng)的緩存中,操作起來,會稍微的繁瑣一些。現(xiàn)在總結(jié)一個較為通用的方法,將文本文件的內(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);  }

總結(jié)

好了,本文的內(nèi)容到這就結(jié)束了,有關(guān)dataset的一些常用的操作,基本屬性和方法在這里就不做介紹了。希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助。


注:相關(guān)教程知識閱讀請移步到ASP.NET教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 淳化县| 紫云| 丰台区| 凤冈县| 大厂| 当阳市| 得荣县| 蚌埠市| 榆林市| 宿迁市| 当雄县| 新晃| 永靖县| 肥乡县| 聊城市| 霞浦县| 方正县| 灌南县| 调兵山市| 嘉黎县| 林西县| 定陶县| 西昌市| 剑河县| 隆子县| 百色市| 哈巴河县| 兴化市| 衡阳县| 新宁县| 正镶白旗| 微博| 新安县| 仲巴县| 云梦县| 布拖县| 乐陵市| 永顺县| 平顶山市| 自治县| 本溪|