2010-10-31 7 views
5

Meine tabstoppgetrennte Datei zu lesen ist so etwas wie dieses:OleDbConnection Mit Tab-separierte Datei

ISO ISO3 ISO-Numeric 
AD AND 20 

Ich habe ohne Glück den folgenden Code versuchen.

OleDbConnection cn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= |DataDirectory|;Extended Properties='text;HDR=Yes;FMT=TabDelimited'"); 
OleDbCommand cmd = new OleDbCommand(@"SELECT * FROM countryInfo.txt", cn); 
OleDbDataAdapter da = new OleDbDataAdapter(cmd); 

cn.Open(); 

DataTable dt = new DataTable(); 
da.Fill(dt); 

Hier ist ein Screenshot des Dataset Visualizer. Es ist offensichtlich nicht die Ausgabe, nach der ich bin. alt text

Irgendwelche Vorschläge? Hier ist meine Datei Schema.ini. Es befindet sich im selben Verzeichnis wie die Textdatei.

[countryInfo.txt] 
Format=TabDelimited 
ColNameHeader=True 
CharacterSet=ANSI 

Sollte ich stattdessen nur etwas wie FileHelpers verwenden?


@Hans Passant Hier ist ein Screenshot. alt text

+0

ich immer analysieren die Datei selbst. –

+0

Ich habe vor ein paar Jahren damit gearbeitet, also bin ich ziemlich eingerostet. Aber ich erinnere mich, dass die schema.ini im selben Verzeichnis wie die Datendatei sein musste. Auch ein # -Zeichen in der vorderen Spalte "kann" ein Problem sein, aber ich bin mir nicht sicher. Es könnte Ihre Spaltenüberschrift interpretieren, um auskommentiert zu werden. –

+0

Schema.ini befindet sich im selben Ordner. Auch ich habe versucht, das # Zeichen zu entfernen, aber das schien nicht zu helfen. –

Antwort

1

Nun, ein offensichtlicher Kandidat ist, dass dieser Leerraum nicht wirklich eine Registerkarte, sondern Leerzeichen ist. Versuchen Sie FMT = Delimited(). Verwenden Sie einen Hex-Viewer, um zu sehen, was wirklich da ist. Backgrounder is here.

Und this thread zeigt, warum mit einem fehlerhaften Stück Code wie Jet, die seit den letzten 9 Jahren nicht unterstützt wurde, ist wie Fehler. Lassen Sie die erste Zeile in schema.ini leer.

+0

FMT = Delimited() hat nicht funktioniert. Wenn ich die Datei in einem Hex-Editor öffne, sehe ich '.' zwischen Feldern. Was bedeutet das wirklich? –

+0

Sie sollen Hex-Zahlen sehen, keine Punkte. Veröffentlichen Sie einen Screenshot. –

+0

Keine Ahnung, was "bh" bedeuten könnte, das war der Punkt, um nach einem Screenshot zu fragen. 09 ist in der Tat der ASCII-Code für eine Registerkarte. –

2

erstellen und eine schema.ini-Datei in den Anwendungsordner speichern Sie den folgenden Text enthält:

------------------Schema.ini file starts here----------------- 
[Data.txt] 
ColNameHeader=True 
Format=TabDelimited 
Col1=First_Name Text 
Col2=Middle_Initial Text 
Col3=Last_Name Text 
------------------Schema.ini file ends here----------------- 

dann den folgenden Code verwenden, um die Data.txt-Datei zu laden:

string fileName = string.Format("{0}", AppDomain.CurrentDomain.BaseDirectory); 
string connectionString = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}; " + "Extended Properties=\"text;HDR=YES;FMT=TabDelimited;\"", fileName); 
string sql = "select * from " + "Data.txt"; 

OleDbConnection con = new OleDbConnection(connectionString); 
con.Open(); 

OleDbDataAdapter dap = new OleDbDataAdapter(sql, con); 
DataTable dt = new DataTable(); 
dt.TableName = "Data"; 
dap.Fill(dt); 

con.Close();