我有以制表符分隔的文本文件。我创建了一个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 进一步分割?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top