Импорт строки из внешней базы.

Quiet333
Дата: 02.02.2016 11:50:27
Есть база mdb A2003.
из внешней базы получаю строку вида:

idпрошивки;ТипПЛИС;ПЛИС;Прошивка;ВерсияПрошивки;БМ;ВерсияБМ;СМ;ВерсияСМ;ИМ;ВерсияИМ;
147;adm;XC3S400;ADP101E1_v10_S400_ADM818x1M5;1.0;ADP101E1;1.0;пробная примечания;;;;
147;adm;XC3S400;ADP101E1_v10_S400_ADM818x1M5;1.0;ADP101E1;1.1;;;другое примечание;;
147;adm;XC3S400;ADP101E1_v10_S400_ADM818x1M5;1.0;ADP101E1;1.2;;;;;

разделители: точка с запятой и перевод строки. первая строка заголовки, но можно и без них. структура постоянная.
Нужно создать новую таблицу или закачать в существующую. Никогда такого не делал.
Куда копать? Может существуют стандартные варианты?
Exell
Дата: 02.02.2016 12:06:39
автор
Может существуют стандартные варианты?

Excel. Данные по столбцам
Поиск по слову парсинг
ПЕНСИОНЕРКА
Дата: 02.02.2016 12:22:03
Quiet333,

idпрошивкиТипПЛИСПЛИСПрошивкаВерсияПрошивкиБМВерсияБМСМВерсияСМИМВерсияИМ
147admXC3S400ADP101E1_v10_S400_ADM818x1M51.0ADP101E11.0пробная примечания
147admXC3S400ADP101E1_v10_S400_ADM818x1M51.0ADP101E11.1другое примечание
147admXC3S400ADP101E1_v10_S400_ADM818x1M51.0ADP101E11.2


вы или урезали строки или не все так просто
видимо это отчет с форматированием пробелами
Quiet333
Дата: 02.02.2016 12:33:55
Exell,

Внешняя база не может формировать файлы excel. может сделать .csv
Но мне не хотелось бы делать обмен через промежуточные файлы.
Quiet333
Дата: 02.02.2016 12:36:04
ПЕНСИОНЕРКА
Quiet333,


вы или урезали строки или не все так просто
видимо это отчет с форматированием пробелами


да, это не вся строка. я даже пока не знаю какого максимального размера она может быть.
но форматирование идет через ; и перевод строки
Анатолий ( Киев )
Дата: 02.02.2016 13:48:46
Т.е. вы получаете строку в переменную? Не в виде файла?
Ну так и дерибаньте ее средствами VBA на составляющие и добавляйте запись Recordset, открытый на таблице.
Примерный алгоритм:
1. Функцией Split преобразовать текст в массив строк по разделителю строк (обычно vbCrLf);
2. Цикл по массиву строк;
3. Каждую строку функцией Split преобразовать в массив полей по разделителю ";";
4. В заранее открытом Recordset-е создать новую запись, где заполнить поля значениями из массива полей и сохранить запись.

ЗЫ. Стандартный импорт из csv был бы проще.
Quiet333
Дата: 02.02.2016 14:09:48
Анатолий ( Киев )
Т.е. вы получаете строку в переменную?
Именно так
Не в виде файла?
Ну так и дерибаньте ее средствами VBA на составляющие и добавляйте запись Recordset, открытый на таблице.
Примерный алгоритм:
1. Функцией Split преобразовать текст в массив строк по разделителю строк (обычно vbCrLf);
2. Цикл по массиву строк;
3. Каждую строку функцией Split преобразовать в массив полей по разделителю ";";
4. В заранее открытом Recordset-е создать новую запись, где заполнить поля значениями из массива полей и сохранить запись.
попробую. но наверное эта пара циклов будет жеваться долго.
ЗЫ. Стандартный импорт из csv был бы проще.
Это установить связь с файлом .csv ? и т.д.
Анатолий ( Киев )
Дата: 02.02.2016 15:33:07
Quiet333
ЗЫ. Стандартный импорт из csv был бы проще.
Это установить связь с файлом .csv ? и т.д.[/quot] Не обязательно связывать, можно сразу импортировать.
DoCmd.TransferText умеет "создать новую таблицу или закачать в существующую", причем ваш пример даже, возможно, без использования спецификации импорта.
Вы можете в одной процедуре сохранить полученный текст в файле - выполнить импорт - удалить файл.

Quiet333
наверное эта пара циклов будет жеваться долго.
Сами циклы - нет. Тормоз - большое (20-30 не в счет) количество поочередно добавляемых записей, но это можно ускорить использованием транзакции или ADODB.Recordset в режиме пакетного сохранения записей.
Хотя я такой подход использую для импорта из хитрых файлов типа логов. В вашем случае я бы применил 1-й вариант.
Quiet333
Дата: 02.02.2016 15:50:52
Анатолий ( Киев ),
Спасибо. Пошел озадачивать. Пусть мне готовят файлы csv, а я буду их трансферить.
Quiet333
Дата: 02.02.2016 16:18:56
Анатолий ( Киев ),

запускаю
DoCmd.TransferText , , "tbl1", "d:\AnWork\csv1.csv"

импорт проходит. но всю строку загоняет в первое поле таблицы.
Как указать, что разделитель ; ? из F1 не понял