使用OleDB读取文本文件时如何正确处理CR
-
05-07-2019 - |
题
我有以制表符分隔的文本文件。我创建了一个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"
"稀土元素"无法转换为Int32,因此第四行中的第一列为空。
如何配置OleDB以使[CR]与[CR] [LF]不同?或任何其他想法?
解决方案
我不相信你可以直接重新配置OLEDB。
另一种方法是使用TextReader和TextWriter将文件处理成临时文件,扫描并将CR单独替换为一些特殊的转义序列。然后使用OLEDB读取此替换临时文件;最后,将特殊转义序列替换回CR。
其他提示
读取字符串中的文件内容,通过 Environment.NewLine
或 \ r \ n
拆分它会不会很容易,这会得到一个数组对于每一行,您可以通过 tab
进一步分割?
不隶属于 StackOverflow