【问题标题】:Reading textfile parsing rows into a Datatable将文本文件解析行读入数据表
【发布时间】:2014-04-05 23:20:06
【问题描述】:

我想读取一个文本文件并将每一行解析成一个数据表。

我希望将数据存储在数据表中的方式也是每个列集的类型,即 int、varchar、日期等

DataTable data = new DataTable();
data.Columns.Add("code", typeof(int));
data.Columns.Add("description", typeof(string));
data.Columns.Add("value", typeof(decimal));

但是当我读取以制表符分隔的文本文件时,如何确保文本文件中的正确列进入数据表中的正确列。

因为我的最终目标是使用 sqlbulkcopy 将此数据表放入具有相同列和类型的 sql server 表中。

【问题讨论】:

    标签: c# datatable


    【解决方案1】:

    不要重新发明轮子,使用可用的 CSV 解析器,例如 this

    DataTable data = new DataTable("CSV");
    var fileInfo = new System.IO.FileInfo("Path");
    using (var reader = new System.IO.StreamReader(fileInfo.FullName, Encoding.Default))
    {
        // use  reader.ReadLine(); to skip all lines but header+data
        Char quotingCharacter = '\0';//'"';
        Char escapeCharacter = quotingCharacter;
        using (var csv = new CsvReader(reader, true, '\t', quotingCharacter, escapeCharacter, '\0', ValueTrimmingOptions.All))
        {
            csv.MissingFieldAction = MissingFieldAction.ParseError;
            csv.DefaultParseErrorAction = ParseErrorAction.RaiseEvent;
            //csv.ParseError += csv_ParseError;
            csv.SkipEmptyLines = true;
            // load into DataTable
            data.Load(csv, LoadOption.OverwriteChanges, csvTable_FillError);
        }
    }
    

    【讨论】:

    • 这是否会为数据表中的每一列存储正确类型的数据。因为目的是使用 sqlbulkcopy 将这个数据表导入到 sql 中
    • @StevieB:那部分我不清楚,你如何确定类型?
    【解决方案2】:

    您需要确保文件中的列的顺序始终正确。或者,如果文件可以包含标题,您可以将文件读入字典行列表,其中键是标题名称/数据表列名称。

    然后读取文件将构建一个行列表,可以在制表符上拆分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多