質問

タブ区切りのテキストファイルがあります。次のように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);
    }
  }
}

1つを除いて、すべて正常に動作します。テキストファイルのデータには、キャリッジリターン[CR]が含まれています。レコード自体は、キャリッジリターンラインフィード[CR] [LF]で区切られます。残念ながら、OleDB / MicrosoftJet(またはこれらのファイルを解析するもの)は両方([CR]、[CRLF])を同じものとして扱います。

MY_FILE.TABの例(数字とテキストの間にタブが必要です):

1   One[CR][LF]
2   Two[CR][LF]
3   Th[CR]
ree[CR][LF]
4   Four[CR][LF]

4の代わりにDataTableに5(不正な)行を与えます。

必要なのは:

1   "One"
2   "Two"
3   "Th\nree"
4   "Four2

しかし、私は得る:

1    "One"
2    "Two"
3    "Th"
null null
4    "Four"

" ree" Int32に変換できないため、4行目の最初の列はnullです。

[CR] [LF]とは異なる[CR]を扱うようにOleDBを構成するにはどうすればよいですか?または他のアイデア?

役に立ちましたか?

解決

OLEDBを再構成してこれを直接実行できるとは思わない。

別のアプローチとしては、TextReaderとTextWriterを使用してファイルを一時ファイルに処理し、CRのみをスキャンして特別なエスケープシーケンスに置き換えます。次に、OLEDBを使用して、この置換一時ファイルを読み取ります。最後に、特別なエスケープシーケンスをCRに戻します。

他のヒント

文字列でファイルの内容を読むのは簡単ではありませんか? Environment.NewLine または \ r \ n で分割します。各行について、 tab でさらに分割できますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top