Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/47: Рейтинг темы: голосов - 47, средняя оценка - 4.77
8865 / 5912 / 585
Регистрация: 27.03.2013
Сообщений: 19,584
1

Разделить поле на несколько

15.01.2015, 10:13. Показов 8921. Ответов 26
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго дня!
Пытаюсь создать БД, типа справочника телефонов.
Нашел в - Excel для нашего города и района, но он в таком непотребном виде, что страшно становится.
В нем 3 поля Телефон, ФИО, АДРЕС.
Вопрос в том можно ли поле - Адрес разбить хотя бы приблизительно на поля типа
Район, н/п (Ну это типа город или поселок), НасПункт, ул (клица или проспект), улица, Дом, Кв.
Сам попытался в ворде разбить, но ни че не получилось.
Кроме того у некоторых записей после последнего знака имеется несколько пробелов (см. рис)
В запросе с помощью - Trim([Адрес]) сжал адресок.
Хотел попробовать в ручную но быстро устал, там около 40000 записей.
Подскажите, возможно ли ваабще такое и если это не сильно заморочно помогите на примере..
Миниатюры
Разделить поле на несколько  
Вложения
Тип файла: rar Разбить На Поля.rar (17.1 Кб, 26 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.01.2015, 10:13
Ответы с готовыми решениями:

Как разделить в таблицу F1 поле Английское1?
как разделить в таблицу F1 поле Английское1 как ПРИ НАЖАТИЕМ КНОПКИ разделить в таблицу F1...

Подскажите, как разделить текст в ячейке на несколько столбцов (разные разделители)
Добрый день. Access. Не могу решить проблему, есть текст в ячейке формата: ...

Несколько значений в поле
Здравствуйте. Подскажите, как сделать, чтобы в таблице в одном поле было несколько значений. ...

Вычисляемое поле за несколько периодов
Всем привет. У меня есть база данных вида: 1) Код операции; 2) Код места; 3) Код продукта; 4)...

26
8865 / 5912 / 585
Регистрация: 27.03.2013
Сообщений: 19,584
15.01.2015, 10:21  [ТС] 2
Помнится как то, давно видел подобную тему, где разбивался текст на несколько, с помощью VBA, но я в этом совсем не рублю, и сделать сам не смогу, даже если и найду примерчик.
Стоит ли овчинка выделки?
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
15.01.2015, 10:38 3
Если есть справочники городов, районов, улиц, то задача выполнима процентов на 80-90. Остальные 10-20 процентов это ошибочные сведения, описки, которые надо анализировать и исправлять вручную.
Если же таких справочников нет, то задача усложняется и процент правильно диагностированных записей может снизиться. К тому же потребуется значительно больший размер кода для правильного разложения адреса на составляющие.
Совет - искать справочники городов, районов, поселков, деревень, улиц. Без них задача может стать неподъемной.
2
Эксперт MS Access
17487 / 7249 / 1651
Регистрация: 21.06.2012
Сообщений: 13,866
15.01.2015, 10:43 4
Суетливо все это. Сначала нужно определиться со структурой адреса (город/поселок ... , улица/переулок/... микрорайон, номер дома, квартира), потом сформулировать правила, как выделять эти составляющие (типа после г/г. и, возможно пробелов, всегда идет город, оканчивается пробелом/./,). Выделить сначала все эти составляющие и собрать в справочники. А потом, находя по справочникам вхождения в адрес, формировать структурированный адрес (коды + сгенерированный текст). И, все равно, придется просматривать/корректировать все, что получилось.
1
8865 / 5912 / 585
Регистрация: 27.03.2013
Сообщений: 19,584
15.01.2015, 10:49  [ТС] 5
Цитата Сообщение от mobile Посмотреть сообщение
Если есть справочники городов, районов, улиц,
Если Вы имеете в виду - Таблицы-Справочники, то вот во 2-й пример добавил или что то другое?
Это чтоб было можно сравнить и выбрать?
Мне бы хоть разбить адреса на составляющие, а потом я вручную отсортирую и подправлю.
Вложения
Тип файла: rar Разбить На Поля-2.rar (21.3 Кб, 50 просмотров)
0
1266 / 448 / 129
Регистрация: 21.03.2013
Сообщений: 1,210
15.01.2015, 11:00 6
Если это данные только по Коврову и области
то задача существенно снижается
1. населенный пункт (г., п., д., с. и тд) всегда закачивается запятой (вариант начала можно сделать справочником)
2. улица (ул., пр-т, пер.,) всегда заканчивается запятой (вариант начала можно сделать справочником - причем он не совпадает с улицей)
3. номеру квартиры если есть всегда предшествует тире -
1
8865 / 5912 / 585
Регистрация: 27.03.2013
Сообщений: 19,584
15.01.2015, 11:04  [ТС] 7
Цитата Сообщение от boby104 Посмотреть сообщение
...Если это данные только по Коврову и области...
Это только по Коврову и району.
Умом то я понимаю, что так должно быть, НО КАК это сделать не умею.
0
2842 / 774 / 41
Регистрация: 20.05.2012
Сообщений: 2,055
16.01.2015, 00:00 8
Это где-то страница А4 кода при той довольно приемлемой структурированности\упорядоченности, которая на твоём рисунке.

За основу берётся КЛАДР и по нему сравнивается каждое слово (словосочетание) между запятыми исходя из названия географического уровня, стоящего рядом с этим именем: ул., пос. и т.д. Далее географич объекты адреса раскладываются по своим уровням; если уровень пустой (например, в адресе не указан район - 2-ой географич уровень, идущий после региона) - то пустая строка: так, основываясь на КЛАДРе, пишется адрес в налоговых документах, например: Москва,,,,пр-т Ленинский,д.1
Цитата Сообщение от mobile Посмотреть сообщение
Остальные 10-20 процентов это ошибочные сведения, описки, которые надо анализировать и исправлять вручную.
Можно ещё больше снизить процент ошибок, если использовать спец алгоритм поиска (видел, кажется, на Хайпроге) по неполному совпадению (если полного совпадения в справочнике не найдено).

Пух, а очень нужно и когда?
(Там мороки примерно на день-два, но в целом интересно, сам давно хотел сделать для себя, всё руки не доходили...)
1
8865 / 5912 / 585
Регистрация: 27.03.2013
Сообщений: 19,584
16.01.2015, 07:30  [ТС] 9
Цитата Сообщение от Андрэич Посмотреть сообщение
...а очень нужно и когда?...
Андрэич - Спасибо за заботу.
Уже не очень срочно нужно, сёдня ночью на работе не спалось, так я в ручную , с помощью условий отбора и в запросе, неспеша за 4-5 час. на 95% практически сделал.
Осталось придумать как в запросе у ФИО последние 4 знака удалить.
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
16.01.2015, 07:48 10
Цитата Сообщение от kmv-puh Посмотреть сообщение
Осталось придумать как в запросе у ФИО последние 4 знака удалить.
Мне кажется, что условие "последние 4 знака удалить" не совсем точное. Между инициалами могут быть пробелы. Может отсутствовать отчетство. Или еще какие ошибки/описки. Правильнее будет брать фамилию до первого пробела
SQL
1
SELECT LEFT(ФИО, instr(1,ФИО, " ")-1) FROM...
Добавлено через 2 минуты
До первого пробела тоже, конечно, не 100-процентный успех. Но все же повыщает вероятность правильного определения фамилии
2
8865 / 5912 / 585
Регистрация: 27.03.2013
Сообщений: 19,584
16.01.2015, 08:07  [ТС] 11
Цитата Сообщение от mobile Посмотреть сообщение
..."последние 4 знака удалить" не совсем точное...
mobile - Спасибо за пример.
Просто я у всех полей поставил формат < у ФИО все буковки маленькие.
Хочу к примеру из:
иванов и.и. сделать
Иванов И. И.
Так как у меня чёйта не получается создать формат что бы сразу в поле ФИО первая буква Фамилии и Инициалы сделались большими, то я хотел это сделать в несколько приемов, сничала разбив, а затем соврать.
Кроме того мне больше гравится, когда между инициалами есть пробел.
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
16.01.2015, 08:53 12
Лучший ответ Сообщение было отмечено VinniPuh как решение

Решение

Цитата Сообщение от kmv-puh Посмотреть сообщение
из:
иванов и.и. сделать
Иванов И. И.
SQL
1
2
SELECT format(LEFT(ФИО,1),">") & mid(ФИО,2,instr(1,ФИО," ")-1) & format(mid(ФИО,instr(1,ФИО," ")+1),">") AS ФИО1 
FROM ...
1
8865 / 5912 / 585
Регистрация: 27.03.2013
Сообщений: 19,584
16.01.2015, 19:13  [ТС] 13
mobile - А подскажите еще пожалуйста как задать формат, чтоб 1-я буква в фамилии была загдавной а остальные маленькие вместо
иванов
получилось
Иванов
А то делить еще и фамилию стремно

Добавлено через 2 минуты
Спасибо, не увидел, что Вы уже выложили пример, форум чей то с запозданием обновляется.

Добавлено через 10 часов 14 минут
mobile - Ваш последний пример ну прям ВАААААЩЕЕЕ СУПЕР _ ПУПЕР прям бесподобен (ранее не знал об таком), я практически только на нём за час смог отсортировать и отредактировать (Правда в ручную) всю свою БД,
Осталось только небольшой лоск навести.
СПАСИБО ОГРОМНЕЙШЕЕ
0
3 / 3 / 0
Регистрация: 03.08.2015
Сообщений: 156
17.02.2017, 13:48 14
mobile,
Подскажи пожалуйста! Как разделить такого типа наименования: к примеру Блок 5А 4-5 ТРУМ.123456.022, Рама 3 КК2.123321, Лопасть А3 КРУМ.123.234 ? Я пытаюсь пойти справа-налево до первого пробела. Но что-то не получается((
SQL
1
2
SELECT Номенклатуры.Наименование, RIGHT([Наименование],InStr(-1,[Наименование]," ")-1) AS Выражение1
FROM Номенклатуры;
0
Модератор
Эксперт MS Access
6017 / 2845 / 693
Регистрация: 12.06.2016
Сообщений: 7,651
17.02.2017, 14:18 15
Split(Наименование, " ")
0
3 / 3 / 0
Регистрация: 03.08.2015
Сообщений: 156
17.02.2017, 14:29 16
Capi, mobile,
Что-то я не уточнил задачу, прошу прощения... из наименования типа:
Блок 5А 4-5 ТРУМ.123456.022, Рама 3 КК2.123321, Лопасть А3 КРУМ.123.234
Мне нужно получить концовки (децимальные номера): ТРУМ.123456.022, КК2.123321, КРУМ.123.234

Вот я и пытаюсь пойти справа-налево до первого пробела. Но что-то не получается((
0
Модератор
Эксперт MS Access
11963 / 4831 / 779
Регистрация: 07.08.2010
Сообщений: 14,151
Записей в блоге: 4
17.02.2017, 14:42 17
Блок 5А 4-5 ТРУМ.123456.022,Блок 5А 4-5ТРУМ.123456.022
Рама сварная 3 КК2.123321, Рама сварная 3КК2.123321
Лопасть А3 КРУМ.123.234 Лопасть А3 КРУМ.123.234

т.е. в левой части может быть не 1 пробел, следовательно деление по последнему пробелу
0
Модератор
Эксперт MS Access
6017 / 2845 / 693
Регистрация: 12.06.2016
Сообщений: 7,651
17.02.2017, 14:47 18
Так и получится.
Visual Basic
1
2
3
4
Dim DecNum As String,  
    S
S = Split(Наименование, " ")
DecNum = S(UBound(S))
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
17.02.2017, 14:49 19
Rikozenit, как уже предлагалось Capi, использование split. Функцию splitfld разместите в общем (стандартном) модуле
Visual Basic
1
2
3
4
5
6
7
8
9
Public Function splitfld(fld)
    Dim p, r, s, i
    p = Split(fld, ",")
    For i = 0 To UBound(p)
        r = Split(p(i), " ")
        s = s & "," & Trim(r(UBound(r)))
    Next
    splitfld = Mid(s, 2)
End Function
В запросе
SQL
1
2
SELECT Номенклатуры.Наименование, splitfld([Наименование]) AS Выражение1
FROM Номенклатуры;
0
Модератор
Эксперт MS Access
6017 / 2845 / 693
Регистрация: 12.06.2016
Сообщений: 7,651
17.02.2017, 14:53 20
в левой части может быть не 1 пробел, следовательно деление по последнему пробелу
Так ведь, ТС говорит "справа налево", то есть по первому справа.
0
17.02.2017, 14:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.02.2017, 14:53
Помогаю со студенческими работами здесь

Поле со списком и несколько значений!
Помогите разобраться. Имеем три таблицы: 1-я кошелек,сумма 2-я кредит, сумма 3-я кошелек,...

преобразовать несколько строк в поле
Здравствуйте уважаемые форумчане! Я пока не силен в акцес поэтому прошу помощи. Нужно...

Несколько дат в одном поле
Здравствуйте, искал ответ на свой вопрос не один день так и не нашел. Ситуация: есть простая...

Форма.Несколько записей в одном поле
Дана форма Фильм. Есть поле Жанр,не могу понять,как,вместо одной записи выбирать сразу несколько....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru