Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: функция left в аксесс 2003
 
 автор: angel_026   (18.08.2009 в 22:29)   личное сообщение
 
 

Привет, уважаемые гуру, аксесса!
Подскажите, плиз, можно ли с помощью функции left вытащить данные из строки до первого пробела, до второго пробела, до третьего пробела и т.д.?
А, то есть примерно 10 000 строк и из их нужно вытащить инфу, я пока недоганяю как ето сделать системно

  Ответить  
 
 автор: Denis V.   (18.08.2009 в 23:00)   личное сообщение
 
 

На вскидку: обрабатывать набор записей на основе этих 10 000 строк. При этом использовать функцию Split, которая возвращает массив из строки с разделителями. Скорость, конечно невысокая будет, но главное сделать форму с прогрессбаром, чтобы видно было, что программа работает ;-)

  Ответить  
 
 автор: angel_026   (18.08.2009 в 23:04)   личное сообщение
 
 

Спасибки, за отклик!
Поясните, чайнику как с прогресс баром сдель форму?

  Ответить  
 
 автор: angel_026   (18.08.2009 в 23:07)   личное сообщение
 
 

Ах, да, забыл спросить: как реализовать эту функцию через VBA или запрос на добавление?

  Ответить  
 
 автор: Lukas   (19.08.2009 в 02:07)   личное сообщение
22 Кб.
 
 

Накидал пример (по-быстрому):

  Ответить  
 
 автор: angel_026   (19.08.2009 в 02:47)   личное сообщение
 
 

А можно сделать так, что бы он ети слова вставлял не в строки а в поля?
Ну, предположим, исходное поле имеет 10 000 срок, а поля адресады в этой же таблице пустые, так вот, в пустые поля добавить слова из исходного поля до пробела или до разделительного знака?
Суть, Ваша, Lukas мне ясна, пример для меня просто супер, тока я немного другого результата хотел добиться
Спасибо, еще раз за участие

  Ответить  
 
 автор: angel_026   (19.08.2009 в 04:42)   личное сообщение
 
 

Да, разобрался окончательно с примером функция Split, возвращает подстроки, а это все таки немного не та функция, которая мне нужна, ведь задача вывести в пустое поле текстовое значение до пробела или разделителя, но в той же строке, что и исходное значение без подстрок.
Быть может фун-ию left и split мона как то объединить?
Ведь left вытаскиевает текстовые значения точно по указанному количеству, а split до разделителя.
Как бы победить эту задачку ?

  Ответить  
 
 автор: snipe   (19.08.2009 в 08:32)   личное сообщение
 
 

А время это важно для Вас
или Вы хотите сделать эту операцию один раз


Если разово то можно по такому алгоритму

Обозначаем динамический массив
считаем количесво символов в строке ( len )
запускаем цикл от 1 до количества символов
Выдергиваем Mid - ом по одному символу и сравниваем с образцом
при совпадении значение переменной цикла заносим в массив

теперь когда местоположение разделителей известно разносим по нужным полям при помощи функции Mid

берем следующее строковое значение и повторяем все заново....

только долго все это будет

  Ответить  
 
 автор: Denis V.   (19.08.2009 в 09:58)   личное сообщение
 
 

Вы в первый раз написали, что Вам надо вытаскивать подстроки до первого пробела, до втрого и т.д. Так что функция Split - это то, что нужно (даю подсказку: используйте конкатенацию, если Вам надо получить подстроку до n-го пробела). А если только до первого пробела, то Вам поможет функция Left и InStr (см. Help).
Можно, конечно, и подстроки вставлять по столбцам, только надо будет обработать тот случай, когда количество подстрок не совпадает с количеством столбцов (особенно, когда столбцов меньше, чем подстрок).

  Ответить  
 
 автор: ЛМВ   (19.08.2009 в 08:56)   личное сообщение
 
 

В EXCEL эта задача решается на "раз".
Выкиньте таблицу в Excel и с помощью мастера "Текст по столбцам" (Меню\Данные\Текст по столбцам) разнесите по ячейкам. Там всё очень понятно написано

  Ответить  
 
 автор: kot_k_k   (19.08.2009 в 11:23)   личное сообщение
 
 

А если сначала прогнать InStr на наличие пробелов,их позиции занести в массив, таблу а потом имея кол-во слов, вывести их как хочешь?
мона усложнить добавить прогон на запятые, точки и проч разделители и так же занести в свои таблы, массивы.
Анализируя массивы можно варьировать вывод!!!

  Ответить  
 
 автор: Vlad62   (30.11.2009 в 00:28)   личное сообщение
 
 

Вот так:
1. Вычилсить длину строки
2. Найти позицию 1-го пробела в строке через INSTR(), запомнить позицию
3. Выделить 1-ю подстроку через LEFT()
4. "Обрезать" исходную строку слева (до позиции пробела)
5. Вернуться к шагу 1 и так в цикле, пока INSTR() не вернет 0

  Ответить  
 
 автор: Explorer   (30.11.2009 в 10:35)   личное сообщение
 
 

а если пробелов больше одного подряд?

  Ответить  
 
 автор: Силblч   (30.11.2009 в 11:27)   личное сообщение
 
 

предварительно аптимизировать! :)

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList