将txt文件导入数据库时没什么问题。 文件的结构有点困难。 在第一行只有如下描述:
描述之后(20到22行之间)出现如下表格:
PartStatus Result Measurement1 Measurement2 .....
900 OK 0 20 .....
600 Passed 30 400 .....
我不知道,桌子的哪一行开始。 读取和处理文件以将其写入数据库的最佳方法是什么?
目前我使用StreamReader并将每个字符串添加到数据表中。
此致
阿明
SampleFile: TestFile
答案 0 :(得分:1)
试试这个:File Helpers。我过去曾涉足过它,这可能会简化阅读CSV的过程。
答案 1 :(得分:1)
您可以使用TextFiledParser类,只是跳过无效行。
using (var reader = new TextFieldParser(@"c:\YourFile"))
{
reader.TextFieldType = FieldType.Delimited;
reader.Delimiters = new string[] {","};
string[] currentRow = null;
while (!reader.EndOfData)
{
try
{
currentRow = reader.ReadFields();
// do something with the values
}
catch (MalformedLineException ex)
{
// skip invalid lines and handle it
}
}
}
答案 2 :(得分:1)
Codeplex上的CommonLibrary.NET项目中还提供专门的CSV解析支持。您可以使用此库here找到CSV解析的示例。
更新
以下是一些代码,可用于解析类似于上面的文本,并使用 CommonLibrary.NET 。请注意,首先缩小原始文本以从表头(origText.Substring(origText.IndexOf("PartStatus"))
)开始,并使用正则表达式匹配将一个或多个连续空格字符替换为单个逗号(Regex.Replace(sometext, "[ ]+", ",")
):< / p>
var origText =
"Type Dummy\n" +
"Status Ready\n" +
"# Comment line\n" +
"# Another comment line\n" +
"PartStatus Result Measurement1 Measurement2\n" +
"900 OK 0 20\n" +
"600 Passed 30 400\n";
var trimmedText =
Regex.Replace(origText.Substring(origText.IndexOf("PartStatus")),
"[ ]+", ",");
var csvDoc = Csv.LoadText(trimmedText, true, false, ",");
Console.WriteLine(csvDoc.Get<int>(1, "Measurement2"));
Console.WriteLine(csvDoc.Get<string>(0, "Result"));
将产生输出:
400
OK
CommonLibrary.NET 的CSV解析组件还提供了一种将CSV数据转换为 ADO.NET DataTable
的简单方法:
var table = csvDoc.ToDataTable();