Страницы: 1
RSS
Более одного разделителя в schema.ini
 
Друзья, добрый день!
Получаю по ADO данные из текстовых файлов. Автоматически создается файл schema.ini.
Там в строчке "Format = TabDelimited" указываю желаемый разделитель.
А как быть, если разделителя два или больше? В приложенном файле разделители табуляция и точка с запятой.

Пока может точку с запятой менять на табуляцию, привести к единому разделителю или есть более красивое решение.
Код


Спасибо.
Изменено: whateverlover - 10.10.2021 15:02:14
 
Цитата
whateverlover написал:
разделителя два или больше
Разделитель всегда один
 
doober, ну да, он один, но задача еще и по точке запятой разделить. В рамках лишь указания разделителей в schema.ini нельзя так сделать?
И как тогда это сделать красиво и лаконично.

На всякий случай, прикладываю весь код, которым эти манипуляции производятся. PQ не подходит, понимаю, что на нем это все гораздо проще. На картинке желаемый результат.

Код


Может на уровне SQL запроса делать замену точки с запятой на табуляцию? Только в нужном мне столбце (столбец О на скрине doober'a). Можно так?
Изменено: whateverlover - 10.10.2021 08:42:27
 
whateverlover, а стандартную функцию экселя "текст по столбцам" пробовали использовать? (ЕМНИП, она может использовать несколько разделителей)

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Имеет ли смысл в таком случае читать через ADO? Считать просто в строку, разбить через SPLIT по переводу строки на записи. Записи на  поля, только вот там куча TAB видимо для выравнивания, но это не проблема обработать.  В нужном поле заменить ; на то что нужно.
По вопросам из тем форума, личку не читаю.
 
Цитата
JayBhagavan написал:
"текст по столбцам"
Это же ведь сначала нужно выгрузить на лист, а потом разбивать по столбцам. Хотелось бы на лист выгрузить все готовое.

БМВ, как содержимое текстового файла получить в строку?
Через ADO делал, просто чтобы разобраться, что такое это ADO и понравилось тем, что файлы бывают разные и достаточно лишь команду SQL поменять, чтобы работало со слегка видоизмененными файлами.
Изменено: whateverlover - 10.10.2021 09:50:07
 
Цитата
whateverlover написал:
содержимое текстового файла получить в строку?
https://excelvba.ru/code/txt
По вопросам из тем форума, личку не читаю.
 
БМВ, спасибо
 
Импорт текста через использование объекта QueryTable (Меню / Данные / Из текста) позволяет задать одновременно несколько разделителей. Макрорекордер корректно записывает последовательность действий.
Недостаток - неправильная работа в случае, если какие-то поля в записях содержат знак перевода строки (не Ваш случай).
Объект QueryTable имеет продуманную систему свойств, в том числе для задания типов импортируемых полей, разделителей, кодировки файла и т.п.
Изменено: sokol92 - 10.10.2021 12:57:49
Владимир
 
sokol92, добрый день!
Спасибо, попробуем и этот вариант :-)
 
Цитата
whateverlover написал:
Это же ведь сначала нужно выгрузить на лист, а потом разбивать по столбцам.
А кто или что мешает написать макрос для этих действий?
Изменено: Андрей_26 - 10.10.2021 15:12:49
 
Решил пойти по пути наименьшего кол-ва исправлений в коде и сделать следующее (замена в необходимом столбце точки с запятой на chr(9)):
Код
.Source = "SELECT F1, REPLACE(F15, ';', Chr(9)) as F2, F3 FROM " & "[" & TxtFile & "] " & ""

И в итоге получил склееный текст:


Почему так получается? Chr(9) это же табуляция, а не пустота. При этом, если заменяю на, например, "!!!!!!!!!!!", то замена происходит корректно.
Как-будто он заменяет на табуляцию, но потом не может эту табуляцию разбить по столбцам. И тупо убирает ее совсем.
Посмотрите, пожалуйста, файл приложил к первому сообщению, положить текстовый в файл в одну папку с Excel-файлом.
 
Табуляция в ячейке видишь? А она есть! :-)
Просто не отображается в ячейке, но оно там есть. проверьте, взяв один символ по номеру и посмотрите его код, или просто длину сравните.
А что не пойти дальше и не сразу в запросе разделить на несколько полей.
Изменено: БМВ - 10.10.2021 15:34:40
По вопросам из тем форума, личку не читаю.
 
Да, действительно, табуляция есть)
А почему же тогда "родную" табуляцию из файла он разбивает по столбцам, а мою склеивает в одном столбце.
Цитата
БМВ написал:
сразу в запросе
Это я пока не умею. Да и всегда хочется понять, почему не работает что-то так, как ты думаешь должно работать)

Кажется, понимаю, что на столбцы он разбивает раньше, чем я делаю Replace. Ведь я уже каким-то образом обращаюсь к столбцам F1, F2 И т.д.
Изменено: whateverlover - 10.10.2021 16:15:36
 
Цитата
whateverlover написал:
Ведь я уже каким-то образом обращаюсь к столбцам F1, F2 И т.д.
правильная мысль
mid и instr совместно с Replace позволит из одного поля сделать несколько.
Изменено: БМВ - 10.10.2021 17:04:04
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх