读取将行解析为Datatable的文本文件

时间:2014-03-04 12:13:59

标签: c# datatable

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

我想要存储在datatable中的数据的方式也是每个列集的类型,即 int,varchar,date等。

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表中。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

不要重新发明轮子,使用像this这样的可用CSV解析器。

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);
    }
}