powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / запрос-корпуса
4 сообщений из 4, страница 1 из 1
запрос-корпуса
    #35825267
student09
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
есть такие данные:
Код: 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.
Street            House    Build	flat
московская	230		143
Московская	230	3	1
московская	230		1
московская	230		1
московская	230		1
московская	230		1
Московская	230	3	2
Московская	230		2
Московская	230		2
Московская	230	4	3
Московская	230		3
Московская	230		3
Московская	230		3
Московская	234	А1	3
Московская	234		3
Московская	234		3
Московская	234		3
Московская	234		3
Московская	234		3
Московская	234		3
Московская	234	А1	3
Московская	234	А2	3
Московская	234		3
Московская	234		3
Московская	234		3
Московская	234		3
Московская	234		3
московская	234	А2	3
и есть пустые корпуса. ЕСЛИ копус пустой, а перед ним кпус НЕ пусто и одинаковый адрес(улица, дом, квартира) то корпус равен предыдущему корпусу...такая вот фигня...
пробовал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Go top
Scan
If not empty(build)
Cbuild=build
Chouse=house
С flat=flat
Cstreet=street
Go (recno()+ 1 )
If alltrim(house)==alltrim(chouse) and alltrim(flat)==alltrim(cflat) and len(alltrim(build))= 0  and alltrim(street)==alltrim(cstreet)
Replace build with alltrim(cbuild)
Endif
endif
endscan


но каждый раз Go (recno()+1) нужно повышать
помогите пожалуйста сделать правильно.
...
Рейтинг: 0 / 0
запрос-корпуса
    #35825434
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, уж.

вместо Go (recno()+1) логичнее использовать skip, а так как идет тупой скан, то после всех проверок (перед строкой endscan) надо сделать skip-1

При этом надо самостоятельно проверять, что после skip мы не ушли за последнюю запись


Вот так мне кажется более логично. Здесь нет прыжков вперед-назад по таблице. Оно понятнее и быстрее отработает:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CPredbuild=''
Scan all

	Chouse=house
	Ñflat=flat
	Cstreet=street

	IF NOT EMPTY(CPredbuild) AND alltrim(house)==alltrim(chouse) and alltrim(flat)==alltrim(cflat) and EMPTY(build) AND alltrim(street)==alltrim(cstreet)
		Replace build with alltrim(CPredbuild)
	ELSE
		CPredbuild=build
	ENDIF

ENDSCAN
...
Рейтинг: 0 / 0
запрос-корпуса
    #35825459
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Go top
do while !eof()

If not empty(build)
Cbuild=build
Chouse=alltrim(house)
Сflat=alltrim(flat)
Cstreet=alltrim(street)
else
If alltrim(house)==chouse and alltrim(flat)==cflat and alltrim(street)==cstreet
Replace build with alltrim(cbuild)
Endif
endif
skip
enddo
...
Рейтинг: 0 / 0
запрос-корпуса
    #35826051
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно еще "выпендриться", дважды открыв одну и ту же таблицу в разных рабочих областях

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
USE MyTab in  0 
USE MyTab in  0  AGAIN ALIAS MyTabFull

select MyTab
SCAN FOR empty(Build) AND Recno()> 1 
	* Переходим на предшествующую запись в копии таблицы
	GO (Recno("MyTab")- 1 ) IN MyTabFull

	* Если запись в копии таблицы удовлетворяет нужным условиям
	* модифицируем содержимое
	IF 	empty(MyTabFull.Build) = .F. and ;
		alltrim(house) == alltrim(MyTabFull.house) and ;
		alltrim(flat) == alltrim(MyTabFull.flat) and ;
		alltrim(street) == alltrim(MyTabFull.street)

		REPLACE Build WITH MyTabFull.Build
	ENDIF
ENDSCAN
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / запрос-корпуса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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