Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сравнение данных / 16 сообщений из 16, страница 1 из 1
08.10.2012, 03:19
    #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
08.10.2012, 07:45
    #37987437
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение данных
AHaPXuST,

tanglir[telepath mode on]
telepath mode failed. unknown error.
[telepath mode off]Если будете так "ясно и четко" формулировать вопрос, до конца света не разберемся. :)
...
Рейтинг: 0 / 0
08.10.2012, 10:50
    #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
08.10.2012, 11:13
    #37987725
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение данных
tanglir
Код: sql
1.
2.
3.
local kolv[3,3]
local q0[1]
STORE 0 TO kolv --имхо единственное реальное применение команды store


А так не пробовал: kolv=0 ? Вид сбоку
...
Рейтинг: 0 / 0
08.10.2012, 11:34
    #37987772
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение данных
Jonny540А так не пробовал: kolv=0 ? Вид сбоку ну, значит, она вообще не нужна :)
...
Рейтинг: 0 / 0
08.10.2012, 11:52
    #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
08.10.2012, 19:20
    #37988941
AHaPXuST
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение данных
Извиняюсь за неточности... Ночью голова уже не работала)
Точная задача стоит так:
Сформировать таблицу, столбцы которой:
-количество вузов с запрошенным финансированием <a;
-количество вузов с запрошенным финансированием в диапазоне (a,b);
-количество вузов с запрошенным финансированием >b;
строки-статус вуза. Значения a и b запрашиваются.
И возникает ошибка именно на проверке условий значений a и b c переменной z3(запр. фин.) вытянутой с таблицы.
...
Рейтинг: 0 / 0
08.10.2012, 20:31
    #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
08.10.2012, 20:37
    #37989041
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение данных
AHaPXuSTИ возникает ошибка именно на проверке условий значений a и b c переменной z3(запр. фин.) вытянутой с таблицы.
Использовать однобуквенные имена переменных в FoxPro - не рекомендуется, поскольку за некоторыми из них закреплены имена рабочих областей. Например, буквы "a" и "b" обозначают соответственно 1 и 2 рабочую область.

Именно неоднозначность интерпретации иногда может вызвать сообщение об ошибке. Чтобы этого избежать, необходимо либо дать переменной более длинное название (больше, чем одна буква), либо всегда предварять имя подобной переменной префиксом "m.". Данный префикс указывает FoxPro, что далее идет имя переменной, а не что-либо еще.
...
Рейтинг: 0 / 0
08.10.2012, 22:12
    #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
08.10.2012, 22:42
    #37989151
AHaPXuST
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение данных
Еще столкнулся с проблемой... Может и элементарной совсем... Как сделать в выводе результата в названиях столбцов вывод переменных а и b со знаками >, < и интервала?
...
Рейтинг: 0 / 0
08.10.2012, 23:28
    #37989197
AHaPXuST
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение данных
AHaPXuST, с одной переменной разобрался, а как записать промежуток,- нет :(
...
Рейтинг: 0 / 0
09.10.2012, 05:49
    #37989299
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение данных
AHaPXuSTЕсли можно упростить 13282789
А вообще вот правильный вариант: 13287066
AHaPXuSTЕще столкнулся с проблемой... Может и элементарной совсем... Как сделать в выводе результата в названиях столбцов вывод переменных а и b со знаками >, < и интервала?А как у вас реализован вывод? Если через grid, то в столбцах есть header-ы, у них есть свойство "caption"...
...
Рейтинг: 0 / 0
09.10.2012, 07:52
    #37989332
AHaPXuST
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение данных
Да, через грид. Но если используется одна переменная, то все нормально, а если 2, то уже не могу использовать такой вариант:
Код: sql
1.
="< "+m.a
...
Рейтинг: 0 / 0
09.10.2012, 07:57
    #37989334
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение данных
Код: sql
1.
header1.caption=LTRIM(STR(m.a))+" < "+LTRIM(STR(m.b))
...
Рейтинг: 0 / 0
09.10.2012, 20:28
    #37990649
AHaPXuST
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение данных
Не совсем то, что нужно было. Но решение нашел:
Код: sql
1.
="("+m.a+","+m.b+")"


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


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