【发布时间】:2009-11-27 15:06:39
【问题描述】:
我有制表符分隔的文本文件。我像这样创建了一个 Schema.ini:
[MY_FILE.TAB]
Format=TabDelimited
ColNameHeader=False
Col1=id Short
Col2=data Text
这是我用来阅读它的代码(C#):
using (var connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\FolderToData\;Extended Properties='text;FMT=delimited'"))
{
using (var command = new OleDbCommand("SELECT * FROM MY_FILE.TAB", connection))
{
var table = new DataTable();
using (var adapter = new OleDbDataAdapter(command)
{
adapter.Fill(table);
}
}
}
一切正常,除了一件事。文本文件中的数据包含回车 [CR]。记录本身由回车换行符 [CR][LF] 分隔。不幸的是,OleDB / MicrosoftJet(或解析这些文件的任何工具)将两者([CR],[CRLF])视为相同。
MY_FILE.TAB 示例(数字和文本之间应该有一个 Tab):
1 One[CR][LF]
2 Two[CR][LF]
3 Th[CR]
ree[CR][LF]
4 Four[CR][LF]
在 DataTable 中给我 5 个(格式错误的)行而不是 4 个。
我需要的是:
1 "One"
2 "Two"
3 "Th\nree"
4 "Four2
但我明白了:
1 "One"
2 "Two"
3 "Th"
null null
4 "Four"
“ree”无法转换为 Int32,因此第四行的第一列为空。
如何配置 OleDB 以将 [CR] 与 [CR][LF] 区别对待?还是有其他想法?
【问题讨论】:
-
你能具体说明你有什么限制吗?意思是,文件/架构是第三方的,或者您可以根据需要对其进行更新?
-
我“按原样”获得了这些文件,需要加载它。我无法影响它。
标签: c# oledb carriage-return csv