powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сравнение данных
16 сообщений из 16, страница 1 из 1
Сравнение данных
    #37987398
AHaPXuST
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Столкнулся с проблемой и не догадываюсь как решить...
Есть таблица с определенными значениями типа Numeric и значения, которое вводятся с клавиатуры и записываются в переменные "а" и "b". Нужно провести сравнение этих значений. Вот к чему пришел я:
Код: sql
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.
31.
32.
33.
34.
FOR i = 1 TO 3
  FOR j = 1 TO 3
    kolv[i,j] = 0
  ENDFOR
ENDFOR

FOR i = 1 TO 3
 j = 1
  SCAN FOR stats[i] = bd.STATUS
   IF  a > bd.z3
    kolv[i,j] = kolv[i,j] + 1
   ENDIF
  ENDSCAN
ENDFOR

FOR i = 1 TO 3
 j = 2
  SCAN FOR stats[i] = bd.STATUS
   IF  a < bd.z3
    IF b > bd.z3
     kolv[i,j] = kolv[i,j] + 1
    ENDIF
   ENDIF
  ENDSCAN
ENDFOR

FOR i = 1 TO 3
 j = 3
  SCAN FOR stats[i] = bd.STATUS
   IF b < bd.z3
    kolv[i,j] = kolv[i,j] + 1
   ENDIF
  ENDSCAN
ENDFOR
...
Рейтинг: 0 / 0
Сравнение данных
    #37987437
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHaPXuST,

tanglir[telepath mode on]
telepath mode failed. unknown error.
[telepath mode off]Если будете так "ясно и четко" формулировать вопрос, до конца света не разберемся. :)
...
Рейтинг: 0 / 0
Сравнение данных
    #37987665
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"лёгким движением брюки превращаются..."
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
local kolv[3,3]
local q0[1]
STORE 0 TO kolv --имхо единственное реальное применение команды store

FOR i = 1 TO 3
 for j=1 to 3
  q0[1]=0
  select count(*) from bd;
   where bd.status=stats[i] and;
    (j=1 and a > bd.z3;
    or j=2 and a < bd.z3 and b > bd.z3;
    or j=3 and b < bd.z3);
   into array q0
  kolv[i,j] = kolv[i,j] + q0[1]
 endfor
ENDFOR

Впрочем, может быть, ТСу вовсе и не оно надо - формулировка условия, мягко говоря, туманная.
...
Рейтинг: 0 / 0
Сравнение данных
    #37987725
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir
Код: sql
1.
2.
3.
local kolv[3,3]
local q0[1]
STORE 0 TO kolv --имхо единственное реальное применение команды store


А так не пробовал: kolv=0 ? Вид сбоку
...
Рейтинг: 0 / 0
Сравнение данных
    #37987772
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jonny540А так не пробовал: kolv=0 ? Вид сбоку ну, значит, она вообще не нужна :)
...
Рейтинг: 0 / 0
Сравнение данных
    #37987818
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirJonny540А так не пробовал: kolv=0 ? Вид сбоку ну, значит, она вообще не нужна :)
Иногда надо бывает кучу переменных проинициализировать, то так нагляднее
Код: sql
1.
store 0 to var1, var2, var3 ...


чем так
Код: sql
1.
2.
3.
4.
var1 = 0
var2 = 0
var3 = 0
...


Но такое редко надо, поэтому можно и без STORE прожить.
...
Рейтинг: 0 / 0
Сравнение данных
    #37988941
AHaPXuST
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь за неточности... Ночью голова уже не работала)
Точная задача стоит так:
Сформировать таблицу, столбцы которой:
-количество вузов с запрошенным финансированием <a;
-количество вузов с запрошенным финансированием в диапазоне (a,b);
-количество вузов с запрошенным финансированием >b;
строки-статус вуза. Значения a и b запрашиваются.
И возникает ошибка именно на проверке условий значений a и b c переменной z3(запр. фин.) вытянутой с таблицы.
...
Рейтинг: 0 / 0
Сравнение данных
    #37989032
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select ;
    bd.STATUS, ;
    sum(iif(bd.z3 < m.a, 1, 0)) as lessA, ;
    sum(iif(between(bd.z3, m.a, m.b), 1, 0)) as betweenAB, ;
    sum(iif(bd.z3 > m.b, 1, 0)) as moreB ;
from bd ;
group by bd.STATUS ;
order by 1



Если нужно отобразить количество и для тех статусов, где финансирования не было вообще (нет записи с таким статусом), то для этого нужна отдельная таблица статусов.
...
Рейтинг: 0 / 0
Сравнение данных
    #37989041
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHaPXuSTИ возникает ошибка именно на проверке условий значений a и b c переменной z3(запр. фин.) вытянутой с таблицы.
Использовать однобуквенные имена переменных в FoxPro - не рекомендуется, поскольку за некоторыми из них закреплены имена рабочих областей. Например, буквы "a" и "b" обозначают соответственно 1 и 2 рабочую область.

Именно неоднозначность интерпретации иногда может вызвать сообщение об ошибке. Чтобы этого избежать, необходимо либо дать переменной более длинное название (больше, чем одна буква), либо всегда предварять имя подобной переменной префиксом "m.". Данный префикс указывает FoxPro, что далее идет имя переменной, а не что-либо еще.
...
Рейтинг: 0 / 0
Сравнение данных
    #37989127
AHaPXuST
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за разъяснения. Очень помогли и надеюсь больше не ошибусь с переменными) С суммами не очень разобрался... А как результат то выводить от них? Мне же еще надо чтобы все выводилось через форму... Сейчас написал в старой форме
Код: sql
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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
CLOSE DATABASES ALL

DECLARE stats[4]
USE kartvuzw.dbf ALIAS bd shared
SELECT status FROM bd INTO ARRAY stats GROUP BY status

local kolv[3,3]
STORE 0 TO kolv

FOR i = 1 TO 3
 j = 1
  SCAN FOR stats[i] = bd.STATUS
   IF  VAL(m.a) > bd.z3
    kolv[i,j] = kolv[i,j] + 1
   ENDIF
  ENDSCAN
ENDFOR

FOR i = 1 TO 3
 j = 2
  SCAN FOR stats[i] = bd.STATUS
   IF  VAL(m.a) < bd.z3
    IF VAL(m.b) > bd.z3
     kolv[i,j] = kolv[i,j] + 1
    ENDIF
   ENDIF
  ENDSCAN
ENDFOR

FOR i = 1 TO 3
 j = 3
  SCAN FOR stats[i] = bd.STATUS
   IF VAL(m.b) < bd.z3
    kolv[i,j] = kolv[i,j] + 1
   ENDIF
  ENDSCAN
ENDFOR

CLOSE DATABASES ALL
DELETE FILE myt.dbf
CREATE TABLE myt (c0 c(22),c1 C(11), c2 C(11), c3 C(11))
FOR i = 1 TO 3
 INSERT INTO myt (c0, c1, c2, c3) VALUES (stats[i], STR(kolv[i,1]), STR(kolv[i,2]), STR(kolv[i,3]))
ENDFOR
GO TOP
DO FORM f22


Вроде все понятно... По крайней мере после паскаля это как раз на него чем-то отдаленно похоже. Если можно упростить, можете подсказать и разъяснить, желательно подробно... Спасибо большое!
...
Рейтинг: 0 / 0
Сравнение данных
    #37989151
AHaPXuST
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще столкнулся с проблемой... Может и элементарной совсем... Как сделать в выводе результата в названиях столбцов вывод переменных а и b со знаками >, < и интервала?
...
Рейтинг: 0 / 0
Сравнение данных
    #37989197
AHaPXuST
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AHaPXuST, с одной переменной разобрался, а как записать промежуток,- нет :(
...
Рейтинг: 0 / 0
Сравнение данных
    #37989299
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHaPXuSTЕсли можно упростить 13282789
А вообще вот правильный вариант: 13287066
AHaPXuSTЕще столкнулся с проблемой... Может и элементарной совсем... Как сделать в выводе результата в названиях столбцов вывод переменных а и b со знаками >, < и интервала?А как у вас реализован вывод? Если через grid, то в столбцах есть header-ы, у них есть свойство "caption"...
...
Рейтинг: 0 / 0
Сравнение данных
    #37989332
AHaPXuST
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, через грид. Но если используется одна переменная, то все нормально, а если 2, то уже не могу использовать такой вариант:
Код: sql
1.
="< "+m.a
...
Рейтинг: 0 / 0
Сравнение данных
    #37989334
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
header1.caption=LTRIM(STR(m.a))+" < "+LTRIM(STR(m.b))
...
Рейтинг: 0 / 0
Сравнение данных
    #37990649
AHaPXuST
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не совсем то, что нужно было. Но решение нашел:
Код: sql
1.
="("+m.a+","+m.b+")"


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


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