|
|
|
| Привет, уважаемые гуру, аксесса!
Подскажите, плиз, можно ли с помощью функции left вытащить данные из строки до первого пробела, до второго пробела, до третьего пробела и т.д.?
А, то есть примерно 10 000 строк и из их нужно вытащить инфу, я пока недоганяю как ето сделать системно | |
|
| |
|
|
|
| На вскидку: обрабатывать набор записей на основе этих 10 000 строк. При этом использовать функцию Split, которая возвращает массив из строки с разделителями. Скорость, конечно невысокая будет, но главное сделать форму с прогрессбаром, чтобы видно было, что программа работает ;-) | |
|
| |
|
|
|
| Спасибки, за отклик!
Поясните, чайнику как с прогресс баром сдель форму? | |
|
| |
|
|
|
| Ах, да, забыл спросить: как реализовать эту функцию через VBA или запрос на добавление? | |
|
| |
|
22 Кб. |
|
| Накидал пример (по-быстрому): | |
|
| |
|
|
|
| А можно сделать так, что бы он ети слова вставлял не в строки а в поля?
Ну, предположим, исходное поле имеет 10 000 срок, а поля адресады в этой же таблице пустые, так вот, в пустые поля добавить слова из исходного поля до пробела или до разделительного знака?
Суть, Ваша, Lukas мне ясна, пример для меня просто супер, тока я немного другого результата хотел добиться
Спасибо, еще раз за участие | |
|
| |
|
|
|
| Да, разобрался окончательно с примером функция Split, возвращает подстроки, а это все таки немного не та функция, которая мне нужна, ведь задача вывести в пустое поле текстовое значение до пробела или разделителя, но в той же строке, что и исходное значение без подстрок.
Быть может фун-ию left и split мона как то объединить?
Ведь left вытаскиевает текстовые значения точно по указанному количеству, а split до разделителя.
Как бы победить эту задачку ? | |
|
| |
|
|
|
| А время это важно для Вас
или Вы хотите сделать эту операцию один раз
Если разово то можно по такому алгоритму
Обозначаем динамический массив
считаем количесво символов в строке ( len )
запускаем цикл от 1 до количества символов
Выдергиваем Mid - ом по одному символу и сравниваем с образцом
при совпадении значение переменной цикла заносим в массив
теперь когда местоположение разделителей известно разносим по нужным полям при помощи функции Mid
берем следующее строковое значение и повторяем все заново....
только долго все это будет | |
|
| |
|
|
|
| Вы в первый раз написали, что Вам надо вытаскивать подстроки до первого пробела, до втрого и т.д. Так что функция Split - это то, что нужно (даю подсказку: используйте конкатенацию, если Вам надо получить подстроку до n-го пробела). А если только до первого пробела, то Вам поможет функция Left и InStr (см. Help).
Можно, конечно, и подстроки вставлять по столбцам, только надо будет обработать тот случай, когда количество подстрок не совпадает с количеством столбцов (особенно, когда столбцов меньше, чем подстрок). | |
|
| |
|
|
|
| В EXCEL эта задача решается на "раз".
Выкиньте таблицу в Excel и с помощью мастера "Текст по столбцам" (Меню\Данные\Текст по столбцам) разнесите по ячейкам. Там всё очень понятно написано | |
|
| |
|
|
|
| А если сначала прогнать InStr на наличие пробелов,их позиции занести в массив, таблу а потом имея кол-во слов, вывести их как хочешь?
мона усложнить добавить прогон на запятые, точки и проч разделители и так же занести в свои таблы, массивы.
Анализируя массивы можно варьировать вывод!!! | |
|
| |
|
|
|
| Вот так:
1. Вычилсить длину строки
2. Найти позицию 1-го пробела в строке через INSTR(), запомнить позицию
3. Выделить 1-ю подстроку через LEFT()
4. "Обрезать" исходную строку слева (до позиции пробела)
5. Вернуться к шагу 1 и так в цикле, пока INSTR() не вернет 0 | |
|
| |
|
|
|
| а если пробелов больше одного подряд? | |
|
| |
|
|
|
| предварительно аптимизировать! :) | |
|
| |