Использование OleDbConnection для чтения файла с разделителями табуляции - PullRequest
5 голосов
/ 31 октября 2010

Файл с разделителями табуляции выглядит примерно так:

ISO ISO3    ISO-Numeric
AD  AND 20

Я безуспешно пробовал следующий код.

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

Вот скриншот визуализатора набора данных,Это явно не выход, который я после.alt text

Есть предложения?Вот мой файл Schema.ini.Он находится в том же каталоге, что и текстовый файл.

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

Должен ли я просто использовать что-то вроде FileHelpers вместо?


@ Hans Passant Вот скриншот.alt text

Ответы [ 2 ]

2 голосов
/ 21 декабря 2011

Создайте и сохраните файл schema.ini в папке приложения, содержащей следующий текст:

------------------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-----------------

Затем используйте следующий код для загрузки файла Data.txt:

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();
1 голос
/ 31 октября 2010

Хорошо, один очевидный кандидат - то, что этот пробел на самом деле не табуляция, а пробелы. Попробуйте FMT = с разделителями (). Используйте шестнадцатеричный просмотрщик, чтобы увидеть, что там на самом деле. Backgrounder здесь .

И этот поток показывает, почему использование глючного куска кода, такого как Jet, который не поддерживается последние 9 лет, является ошибкой С ответом оставьте первую строку в schema.ini пустой.

...