powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Подскажите пожалуйста мальчики ???
10 сообщений из 10, страница 1 из 1
Подскажите пожалуйста мальчики ???
    #32753051
Maska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет !


Вопрос, сформировала таблицу, теперь хочу проиндексировать ее,

по улице+номеру дома+корпусу+квартире

не могу, т.к. в таблице номер дома это 10, 10a, 10б,1, 5, 4а и.т.д

это поле у меня строковое,

подскажите пожалуйста как так сделать чтобы хитро индекс чтобы нумераия шла 1, 4а, 5, 10, 10а, 10б


Спасибо сладкие
...
Рейтинг: 0 / 0
Подскажите пожалуйста мальчики ???
    #32753071
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Улица + padl(НомерДома,6)+...
...
Рейтинг: 0 / 0
Подскажите пожалуйста мальчики ???
    #32753104
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как то так
улица+IIF(isalpha(RIGHT(ALLTRIM(dom),1)),PADL(ALLTRIM(dom),10,'0'),PADL(ALLTRIM(dom),9,'0')+'0')+....
...
Рейтинг: 0 / 0
Подскажите пожалуйста мальчики ???
    #32753225
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По большому счету, корректной индексации не получится

Однако FoxPro позволяет вставлять в выражение индекса пользовательские функции. Вообще-то, это не есть хорошо, но если очень надо, то попробуй так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
select MyTab
INDEX ON MyFunc(Street, House, Korp, Room) TO SortOrd.idx COMPACT

FUNCTION MyFunc
LPARAMETERS tcStreet, tcHouse, tcKorp, tcRoom
LOCAL lcRetVal
lcRetVal = m.tcStreet
IF VAL(m.tcHouse)= 0 
	lcRetVal = m.lcRetVal+Space( 10 )+m.tcHouse
ELSE
	lcRetVal = m.lcRetVal+SelNumber(m.tcHouse)
ENDIF
IF VAL(m.tcKorp)= 0 
	lcRetVal = m.lcRetVal+Space( 10 )+m.tcKorp
ELSE
	lcRetVal = m.lcRetVal+SelNumber(m.tcKorp)
ENDIF
IF VAL(m.tcRoom)= 0 
	lcRetVal = m.lcRetVal+Space( 10 )+m.tcRoom
ELSE
	lcRetVal = m.lcRetVal+SelNumber(m.tcRoom)
ENDIF

RETURN (m.lcRetVal)

FUNCTION SelNumber
LPARAMETERS tcString
LOCAL lnNumber, lcNoNumber
lnNumber = VAL(m.tcString)
lcNoNumber = SubStr(m.tcString,LEN(TransForm(m.lnNumber)))
RETURN (STR(m.lnNumber)+PADR(m.lcNoNumber,LEN(m.tcString)))

Смысл всего этого безобразия в том, что я выделяю из символьной строки ту часть, которая является числом (я предполагаю, что число идет вначале строки).

Т.е. вместо строки "101а" я формирую строку вида:

STR(101)+PADR("a",10)

И вот эту-то строку и использую в выражении индекса.
...
Рейтинг: 0 / 0
Подскажите пожалуйста мальчики ???
    #32753256
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или просто
index on улица+;
IIF(isalpha(RIGHT(ALLTRIM(dom),1)),PADL(ALLTRIM(dom),10,'0'),PADL(ALLTRIM(dom),9,'0')+'0');
+str(корпус)+str(квартира) to myindex
...
Рейтинг: 0 / 0
Подскажите пожалуйста мальчики ???
    #32753905
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi leaf!

"Просто" НЕ будет никогда - номера домов бывают и 10-1 или 10/1 а если это
вводит человек, то и "10 корп.1" запросто появится... В общем лучше сделать
через функцию - а уж её накручивать по мере возможностей :) Конечно ещё
лучше нормализовать структуру данных - разнеся это по отдельным полям :)

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Подскажите пожалуйста мальчики ???
    #32754010
Андрей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя, конечно, есть таблица улиц, таблица домов, таблица квартир.
В каждой из этих таблиц должно быть уникальное поле ID улицы, дома...

Индекс номера дома надо вынести в отдельное поле...
...
Рейтинг: 0 / 0
Подскажите пожалуйста мальчики ???
    #32754012
Андрей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя, конечно, есть таблица улиц, таблица домов, таблица квартир.
В каждой из этих таблиц должно быть уникальное поле ID улицы, дома
Таблицу квартир лучше всего показавать как представление из этих таблиц...

Индекс номера дома надо вынести в отдельное поле...
...
Рейтинг: 0 / 0
Подскажите пожалуйста мальчики ???
    #32754054
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 korolyov
вполне согласен особенно насчет отдельного поля
но в хорошую программу абы что так просто и не введешь
а дробь бывает когда дом стоит на двух улицах
и корпус есть в отдельном поле
так что у меня бы скорее всего просто прокатило бы
...
Рейтинг: 0 / 0
Подскажите пожалуйста мальчики ???
    #32762642
karly™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На Фоксклубе выложил функцию , которая помогает решить указанную проблему
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Подскажите пожалуйста мальчики ???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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