我想读取一个文本文件并将每行解析为数据。
我想要存储在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表中。
答案 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);
}
}