powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Fox Pro 2.6 - цикл с группировкой
3 сообщений из 3, страница 1 из 1
Fox Pro 2.6 - цикл с группировкой
    #34356713
AlexanderKR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, пожалуйста, как можно сделать следующее. Имеется файл akt.dbf с двумя полями - tarif и summa:
tarif summa
1 500
1 300
2 1000
2 1000
и т.д.
Мне нужны итоги по всем тарифам в текстовый файл, но как их сгруппировать, не знаю.
Что-то вроде:
set textmerge on
set textmerge to "C:\1.txt"
use akt
goto top
scan
\<<tarif>>
\<<str(summa)>>
endscan
set textmerge to
Но это без группировки, а как сгруппировать, т.е. чтобы было:
тариф 1 - 800
тариф 2 - 2000
Итог ...
Спасибо.
...
Рейтинг: 0 / 0
Fox Pro 2.6 - цикл с группировкой
    #34356724
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select tarif, sum(Summa) Summa from Akt into cursor cTmp gtoup by tarif
А потом сканируй полученный курсор
...
Рейтинг: 0 / 0
Fox Pro 2.6 - цикл с группировкой
    #34356853
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самое правильно - это то, что предложил AleksMed . Но если хочется по другому, то логика здесь такая:

-) Таблица упорядочивается таким образом, чтобы записи шли в порядке возрастания значения того поля, по которому будет выполняться группировка. Причем под термином "упорядочивается" понимается не физическое изменение порядка следования записей (хотя и это возможно), а просто наличие соответсвующего индекса.

-) Далее запоминается значение поля, по которому идет группировка из предыдущей записи и сравнивается со значением того же поля в текущей записи. Если совпадают, то группа еще не кончилась, если отличаются, то это конец группы

В общем, ничего особо сложного, но сильно утомительно. Что-то вроде

Код: 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.
PRIVATE sumTarif, prevTarif

set textmerge on
set textmerge to "C:\1.txt"
use akt
* Предполагаю, что есть индекс по полю tarif с именем tarif
SET ORDER TO tarif
go top
prevTarif = akt.tarif
scan
	if prevTarif <> akt.tarif
		* Т.е. текущая запись имеет уже другой признак группы
		* вывожу предыдущую сумму в файл
		\<<m.prevTarif>>
		\<<str(m.sumTarif)>>
		* Меняю признак группировки и обнуляю сумму
		prevTarif = akt.tarif
		sumTarif =  0 
	endif

	* Увеличиваем значение суммы
	sumTarif = m.sumTarif + akt.summa
endscan

* По окончании цикла надо вывести последнюю сумму
\<<m.prevTarif>>
\<<str(m.sumTarif)>>

set textmerge to
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Fox Pro 2.6 - цикл с группировкой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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