Строка подключения OleDb для файлов с разделителями табуляцией

Мне нужно читать различные типы файлов данных, такие как xlsx, csv, txt и mdb, и я хочу использовать соединение OleDB, чтобы процесс чтения файлов был таким же, только с другой строкой подключения. Однако OleDB игнорирует разделитель в строках подключения, таких как следующие, и читает только разделители с запятыми.

Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Text;HDR=Yes;Delimited(\t)';
Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Text;HDR=Yes;FMT=TabDelimited';

Я бы предпочел, чтобы механизм OleDB выполнял эту работу, а не анализировал файлы с разделителями табуляции самостоятельно.

По этому поводу есть несколько вопросов StackOverflow, и решение обычно заключается в создании файла .ini в том же каталоге, но иногда у моих пользователей нет прав на запись в папку. Учитывая, что всем вопросам StackOverflow, похожим на мой, уже как минимум пару лет, есть ли у кого-нибудь обновленная информация по этой проблеме?


person zambonee    schedule 08.11.2017    source источник


Ответы (1)


Вот как я использовал разделитель | для чтения файлов .csv или .txt с разделителями | с помощью OleDB, однако я использовал механизм ACE и строил строку подключения из C #:

connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Path.GetDirectoryName(catalogFile) + ";Extended Properties='text;HDR=YES;FMT=Delimited(" + (char)124 + ")'";

(char)124 означает ASCII-код |. Зная, что ASCII-код TAB равен 9, вы можете попробовать использовать это в строке подключения:

...;Extended Properties='text;HDR=YES;FMT=Delimited(" + (char)9 + ")'";

Попробуйте приведенный выше фрагмент кода, а также попробуйте свой код с помощью драйвера MS Access Database Engine. Поскольку он новее, возможно, он лучше обрабатывает конфигурацию разделителя.

person andrews    schedule 08.11.2017
comment
К сожалению, это не работает для меня. Я также пробовал файл с разделителями вертикальной черты с "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=...;Extended Properties='text;HDR=YES;FMT=Delimited(" + (char)124 + ")'" и ...FMT=Delimited(|)' без успеха. - person zambonee; 08.11.2017
comment
@zambonee, да, на самом деле в дополнение к вышеупомянутому соед. строки я также генерирую schema.ini с текстовым разделителем, например: "[" + Path.GetFileName(file) + "]\r\nFormat=Delimited(|)\r\nTextDelimiter=" + textDelimiter.... Так что, наверное, без него не получится. - person andrews; 09.11.2017