Frage

Ich habe Textdateien, die Tab begrenzt. Ich habe ein Schema.ini wie folgt:

[MY_FILE.TAB]
Format=TabDelimited
ColNameHeader=False
Col1=id Short
Col2=data Text

Dies ist der Code, den ich benutze es (C #) zu lesen:

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);
    }
  }
}

Alles funktioniert gut, außer einer Sache. Die Daten in der Textdatei enthält Carriage Returns [CR]. Aufzeichnungen selbst werden durch Carriage Return Line-Feeds [CR] [LF] getrennt. Leider OleDB / MicrosoftJet (oder was auch immer diese Dateien parst) behandelt beide ([CR], [CRLF]) gleich.

Beispiel von MY_FILE.TAB (es soll ein Tab zwischen Zahlen und Text sein):

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

Gibt mir 5 (malformed) Zeilen in der Datatable statt 4.

Was ich brauche, ist:

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

Aber ich bekomme:

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

"ree" nicht auf Int32 so erster colum in vierter Zeile umgewandelt wird null ist.

Wie kann ich konfigurieren OleDB [CR] anders als [CR] [LF] behandeln? Oder irgendwelche anderen Ideen?

War es hilfreich?

Lösung

Ich glaube nicht, Sie OLEDB neu konfigurieren kann dies direkt zu tun.

Ein alternativer Ansatz wäre, einen Textreader und Textwriter zu verwenden, um die Datei in eine temporäre Datei, Scannen und ersetzen CR allein in eine spezielle Escape-Sequenz zu verarbeiten. Dann OLEDB verwenden diese Ersetzung temporäre Datei zu lesen; schließlich ersetzt die spezielle Escape-Sequenz zurück auf eine CR.

Andere Tipps

Wäre es nicht einfach sein, den Inhalt der Datei in einem String zu lesen, spaltet es durch Environment.NewLine oder \r\n, die Sie für jede Zeile ein Array erhalten, die Sie weiter durch tab aufspalten?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top