Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как такое можно реализовать? / 7 сообщений из 7, страница 1 из 1
23.09.2009, 12:08
    #36212243
ping_09
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как такое можно реализовать?
Здравствуйте.

Имееются две таблицы:
table1 (town c(40),street c(40))
table2 (town c(40),street c(40))

Данные table1:

Town Street
Москва г Первая ул

Данные table2:

Town Street
г.Москва ул.Первая

Как сравнить эти таблицы только по названию?
Пробовал делать так:

local lcTownTable1
lcTownTable1="г"

local lcStreetTable1
lcStreetTable1="ул"

local lcTownTable2
lcTownTable2="г."

local lcStreetTable2
lcStreetTable2="ул."

locate for chrtran(chrtran(table1.town,"m.lcTownTable1","")," ","")==chrtran(chrtran(table2.town,"m.lcTownTable2","")," ","") and;
chrtran(chrtran(table1.street,"m.lcStreetTable1","")," ","")==chrtran(chrtran(table2.street,"m.lcStreetTable2","")," ","")
...
Рейтинг: 0 / 0
23.09.2009, 13:17
    #36212447
ухыч
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как такое можно реализовать?
ping_09Здравствуйте.
Данные table1:
Town Street
Москва г Первая ул

Данные table2:
Town Street
г.Москва ул.Первая

Как сравнить эти таблицы только по названию?
Если позиции сокращения города и улицы по каждой из таблиц представленны именно так как дано в данных и не гуляют,то можно попробовать так:

Код: plaintext
1.
2.
3.
select a.*.b.*
from table1 a,table2 b
where LEFT(a.town,ATC(' г ',a.town)- 1 )=substr(b.town,ATC('г.',b.town)+ 2 ) 
and LEFT(a.street,ATC(' ул ',a.street)- 1 )=substr(b.street,ATC('ул.',b.street)+ 2 ) 
...
Рейтинг: 0 / 0
23.09.2009, 13:18
    #36212452
ухыч
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как такое можно реализовать?
Код: plaintext
1.
2.
3.
select a.*.b.*
from table1 a,table2 b
where LEFT(a.town,ATC(' г ',a.town)- 1 )=substr(b.town,ATC('г.',b.town)+ 2 ) 
and LEFT(a.street,ATC(' ул ',a.street)- 1 )=substr(b.street,ATC('ул.',b.street)+ 3 ) 
...
Рейтинг: 0 / 0
23.09.2009, 13:39
    #36212499
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как такое можно реализовать?
Это все частные случаи.
Например ATC(' г ',a.town)-1 = -1 если ' г ' вообще не будет. и LEFT(a.town,ATC(' г ',a.town)-1) даст пустую строку.

Лучше сначала привести один из справочников к виду второго.
Скопировать в курсор и причесать чтобы ' г ' стояла с одной стороны.

Совсем выкидывать 'г' и 'ул' не надо, у них смысловая нагрузка есть.
Где гарантия что нет в одном городе "ул. Ленина" и "пр. Ленина" ?
...
Рейтинг: 0 / 0
23.09.2009, 15:18
    #36212779
ухыч
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как такое можно реализовать?
Dima TЭто все частные случаи.
Например ATC(' г ',a.town)-1 = -1 если ' г ' вообще не будет. и LEFT(a.town,ATC(' г ',a.town)-1) даст пустую строку.

Лучше сначала привести один из справочников к виду второго.
Скопировать в курсор и причесать чтобы ' г ' стояла с одной стороны.

Совсем выкидывать 'г' и 'ул' не надо, у них смысловая нагрузка есть.
Где гарантия что нет в одном городе "ул. Ленина" и "пр. Ленина" ?
+
поместить бы эту смысловую нагрузку в отдельное поле:
tip_street:
г-город
ул-улица
пр-проспект
...
...
Рейтинг: 0 / 0
23.09.2009, 18:36
    #36213392
igorbik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как такое можно реализовать?
ping_09,

Для целей сравнения попробуйте использовать оператор вхождения подстроки в строку "$"
Например
IF 'Москва' $ table1.town AND 'Москва' $ table2.town THEN... ENDIF
или
IF 'Первая' $ table1.street AND 'Первая' $ table2.street THEN... ENDIF
или
IF 'Москва' $ table1.town AND 'Первая' $ table1.street THEN... ENDIF
и т.п.
...
Рейтинг: 0 / 0
23.09.2009, 19:32
    #36213493
reware
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как такое можно реализовать?
Мне кажется, все это пустая затея. Изначально разнородный вид хранения города/улицы делает затруднительным уверенное определение соответствия.
По словам автора :

Данные table1:
Town Street
Москва г Первая ул

Данные table2:
Town Street
г.Москва ул.Первая


Если во второй таблице после "г" и "ул" есть хотя бы точка, то в первой таблице эти признаки города и улицы просто окружены пробелами. Вроде бы, хотя где гарантия, что оператор не поленился и поставил точку (во 2-й таблице) и поставил пробелы (в 1-й). Как искать соответствие в таком примере :

Данные table1:
Town Street
Львов г Светлая ул

Данные table2:
Town Street
дер.Светлая наб.Львовская


И таких частных случаев можно придумать еще миллион. Найти вхождение подстроки из одной таблицы в строку другой таблицы - не есть проблема. Проблема в точном определении, где город (и точно-ли тот) и где улица (и точно-ли именно та).
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как такое можно реализовать? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]