Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / проверить соответствие кода / 25 сообщений из 55, страница 1 из 3
01.11.2012, 11:43
    #38021344
Дима1991
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить соответствие кода
добрый день. Есть курсоры pacient, sluch и curs1.
Курсор pacient имеет основные поля agep, dr,npolis,spolis. Для каждого пациента из этого курсора имеются случаи которые хранятся в sluch. Основные поля npolis,spolis, ds0,ds1,ds2. Поля ds0,ds1,ds2 это коды МКБ. Нужно проверить соответствие кода МКБ возрасту пациента. в курсоре pacient agep - это поле возраст.

Проверка соответствия кода МКБ показана ниже: Есть курсор curs1 там поле code - КОД МКБ, age возраст, и поле compr - содержит знаки <,>,=.

если в curs1 поле age=1 а поле compr=">=" то значение в поле code соответствует пациенту возраст которого больше или равен 1 год

Задача проверить соответствие кода МКБ для каждого случая возрасту пациента.

помогите разобраться с логикой задачи.
...
Рейтинг: 0 / 0
01.11.2012, 11:55
    #38021369
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить соответствие кода
Сделай свою функцию и передавай туда возраст пациента, условие, возраст ограничения. А внутри проверяй и возвращай результат проверки.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
func CheckMKB
lpara tnAgep, tcUsl, tnAgeUsl
local llRet
tcUsl = alltrim(tcUsl)
do case
   case tcUsl == '>'
      llRet = (tnAgep > tnAgeUsl)
   case tcUsl == '<='
      llRet = (tnAgep <= tnAgeUsl)
   otherwise
      MessageBox('Неизвестное условие ' + tcUsl)
      llRet = .NULL.
endcase
return llRet


ЗЫ alltrim() и == использованы не случайно.
...
Рейтинг: 0 / 0
01.11.2012, 12:08
    #38021397
Дима1991
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить соответствие кода
Dima T, Usl это переменная или какое-то условие типа? у меня вроде идет в curs1 по полям age и compr условия. если age=10 к примеру и compr=">" то для таких пациентов код МКБ допустим Z000 это поле code
...
Рейтинг: 0 / 0
01.11.2012, 12:28
    #38021434
Дима1991
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить соответствие кода
А понял что значит Usl.. сейчас попробую разобраться в вашей функции
...
Рейтинг: 0 / 0
01.11.2012, 12:32
    #38021437
Дима1991
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить соответствие кода
не до конца понял. Ваша функция проверяет два условия и последнее otherwise выполняется если ни один из case не выполнился получается?
...
Рейтинг: 0 / 0
01.11.2012, 12:35
    #38021442
reware
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить соответствие кода
Дима1991добрый день. Есть курсоры pacient, sluch и curs1.
Курсор pacient имеет основные поля agep, dr,npolis,spolis. Для каждого пациента из этого курсора имеются случаи которые хранятся в sluch. Основные поля npolis,spolis, ds0,ds1,ds2. Поля ds0,ds1,ds2 это коды МКБ. Нужно проверить соответствие кода МКБ возрасту пациента. в курсоре pacient agep - это поле возраст.

Проверка соответствия кода МКБ показана ниже: Есть курсор curs1 там поле code - КОД МКБ, age возраст, и поле compr - содержит знаки <,>,=.

если в curs1 поле age=1 а поле compr=">=" то значение в поле code соответствует пациенту возраст которого больше или равен 1 год

Задача проверить соответствие кода МКБ для каждого случая возрасту пациента.

помогите разобраться с логикой задачи.
Ну и что это, опять очередной курсовой проект ? "А голова нужна исключительно чтобы ею есть".
...
Рейтинг: 0 / 0
01.11.2012, 12:37
    #38021447
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить соответствие кода
CheckMKB в моем примере это пользовательская функция. tnAgep, tcUsl, tnAgeUsl - параметры.
Сохрани эту функцию в процедурный файл, или в файл CheckMKB.prg (без первой строки кода) и вызывай со своими параметрами:
if CheckMKB(pacient.agep, curs1.compr, curs1.age)
? 'Подходит'
else
? 'Не подходит'
endif

PS Ты бы книжку какую-нибудь почитал по фоксу. Судя по твоим постам ты в элементарных вещах путаешься.
...
Рейтинг: 0 / 0
01.11.2012, 12:37
    #38021448
Дима1991
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить соответствие кода
reware, нет это не курсовая, по работе это..
...
Рейтинг: 0 / 0
01.11.2012, 12:38
    #38021450
Дима1991
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить соответствие кода
я по ходу учусь.. в свободное время читаю ведь
...
Рейтинг: 0 / 0
01.11.2012, 12:42
    #38021456
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить соответствие кода
Дима1991не до конца понял. Ваша функция проверяет два условия и последнее otherwise выполняется если ни один из case не выполнился получается?
Хэлп почитай про DO CASE

Читай книжку. Хотя бы синтаксис основных команд изучи.
...
Рейтинг: 0 / 0
01.11.2012, 12:44
    #38021457
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить соответствие кода
Код: sql
1.
2.
3.
4.
5.
6.
7.
select p.что_нибудь,u.что_нибудь
 ,icase(h.compr=='>',p.age>h.age
       ,h.compr=='<=',p.age<=h.age
       ,.null.) as CheckMKB
from pacient p 
join usl u on p.spolis=u.spolis and p.npolis=u.npolis
left join hediag h on u.ds==chrtran(h.code,'.','')
...
Рейтинг: 0 / 0
01.11.2012, 12:45
    #38021460
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить соответствие кода
tanglir, не взрывай мозг начинающим
...
Рейтинг: 0 / 0
01.11.2012, 12:45
    #38021461
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить соответствие кода
Правда, тут одна функция не на том месте поставлена... ну да это уже мелочи ))
...
Рейтинг: 0 / 0
01.11.2012, 12:46
    #38021463
Дима1991
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить соответствие кода
Dima T, сделал как ты говоришь. Мне нужно знаешь как: первый случай когда поле compr=">=". Надо проверить равно ли compr ">=" если равно проверить возраст пациента больше или равен возрасту в curs1. Если больше то получается возраст пациента удовлетворяет условию проверки возраста. как я понимаю и потом надо проверить коды МКБ из sluch которые удовлетворяют этому возрасту что ли? тут немного путаюсь
...
Рейтинг: 0 / 0
01.11.2012, 12:47
    #38021467
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить соответствие кода
tanglir
Код: sql
1.
2.
3.
4.
5.
6.
7.
select p.что_нибудь,u.что_нибудь
 ,icase(h.compr=='>',p.age>h.age
       ,h.compr=='<=',p.age<=h.age
       ,.null.) as CheckMKB
from pacient p 
join usl u on p.spolis=u.spolis and p.npolis=u.npolis
left join hediag h on u.ds==chrtran(h.code,'.','')


Что-то сразу не заметил, не будет это работать.
...
Рейтинг: 0 / 0
01.11.2012, 12:48
    #38021470
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить соответствие кода
Dima T, это я-то взрываю? А зачем передавать в функцию tcUsl и tnAgeUsl, если достаточно одного tcCode (код случая), всё остальное она сама должна считать.
...
Рейтинг: 0 / 0
01.11.2012, 12:52
    #38021481
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить соответствие кода
Dima TЧто-то сразу не заметил, не будет это работать.Ладно, ладно:
Код: sql
1.
2.
3.
4.
5.
6.
7.
select p.что_нибудь,u.что_нибудь
 ,cast(icase(h.compr=='>',p.age>h.age
       ,h.compr=='<=',p.age<=h.age
       ,.null.) as logical) as CheckMKB
from pacient p 
join usl u on p.spolis=u.spolis and p.npolis=u.npolis
left join hediag h on u.ds==chrtran(h.code,'.','')

, так сойдёт?
...
Рейтинг: 0 / 0
01.11.2012, 12:53
    #38021485
Дима1991
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить соответствие кода
а нельзя сделать так как я говорю проверить первый случай поле compr если равно ">=" проверить возраст и потом код МКБ проверить и если соответствует вывести в курсор потом второе условие где compr="<" ? возможно ваши коды делают это но не все понимаю в них
...
Рейтинг: 0 / 0
01.11.2012, 12:56
    #38021494
Дима1991
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить соответствие кода
tanglir, откуда usl? это у меня курсоры sluch,pacient и hediag (таблица), но я поле code в нем сделал тами: Z00.0 и вывел в курсор. А usl это другой курсор он тоже у меня есть но для него наверное отдельно надо проверять
...
Рейтинг: 0 / 0
01.11.2012, 13:03
    #38021501
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить соответствие кода
Дима1991и потом код МКБ проверитьТак я что-то не понял, мы что проверяем? Вроде бы код у нас уже есть, и нужно проверить возраст... а тут выясняется, что ещё и код проверять надо, что ли?

Мой пример соединяет услуги и пациентов по номерам полисов (первый джойн).
После чего для каждой пары "пациент-услуга" проверяет соответствие кода МКБ возрасту пациента (icase)
Чтобы это проверить, надо лезть в таблицу hediag, для чего и служит второй джойн. Он - левый(left), чтобы в случае, когда в услуге указан несуществующй код МКБ, пара "пациент-услуга" не потерялась (для таких пар результат проверки будет NULL).
Дима1991tanglir, откуда usl? это у меня курсоры sluch,pacient и hediagу вас же надо проверять usl.ds и sluch.ds1,ds2,ds3. Я написал для usl, но для случаев код будет тот же самый, только заменить таблицу и имена полей.
...
Рейтинг: 0 / 0
01.11.2012, 13:07
    #38021510
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить соответствие кода
tanglirDima T, это я-то взрываю? А зачем передавать в функцию tcUsl и tnAgeUsl, если достаточно одного tcCode (код случая), всё остальное она сама должна считать.
Развернутый код проще понимается, несмотря на его объем и избыточность. Операции простейшие, можно построчно проследить что в какой последовательности происходит.
А когда решение всей задачи свернуто в одну строчку с непривычки можно мозг сломать пока поймешь что когда произойдет.
Может я и не прав. Проехали.
tanglir
Код: sql
1.
2.
3.
4.
5.
6.
7.
select p.что_нибудь,u.что_нибудь
 ,cast(icase(h.compr=='>',p.age>h.age
       ,h.compr=='<=',p.age<=h.age
       ,.null.) as logical) as CheckMKB
from pacient p 
join usl u on p.spolis=u.spolis and p.npolis=u.npolis
left join hediag h on u.ds==chrtran(h.code,'.','')

, так сойдёт?
Нет :)
Код: sql
1.
? '> ' == '>'


== вернет .F. если длина сравниваемых строк разная. Я ж не просто так alltrim() у себя добавил.
...
Рейтинг: 0 / 0
01.11.2012, 13:09
    #38021513
Дима1991
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить соответствие кода
tanglir, вообще задача такова. опишу с самого начала. был xml Файл из него получили три курсора pacient, usl и sluch: пациенты, услуги и случаи. Для одного случая несколько услуг может быть. Задача такая стоит: проверить Соответствие кода МКБ возрасту пациента. Соответствие кода МКБ возрасту представлено в файле Hediag.dbf (в нем коды МКБ хранятся без точки, разделяющей подрубрики), пример на скриншоте:

тут выложу скрин таблицы hediag


Поля age и compr определяют возрастное условие. Определение возраста пациента нужно проводить на день даты исследования.
...
Рейтинг: 0 / 0
01.11.2012, 13:11
    #38021521
Дима1991
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить соответствие кода
возраст пациентов определил сразу после получения курсоров и занес в поле pacient.age. теперь есть курсоры и возрасты.. дальше темный лес
...
Рейтинг: 0 / 0
01.11.2012, 13:13
    #38021526
Дима1991
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить соответствие кода
pacient.agep вернее
...
Рейтинг: 0 / 0
01.11.2012, 13:24
    #38021558
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверить соответствие кода
Дима1991тут выложу скрин таблицы hediag

Ты лучше примеры в виде кода выкладывай, без ненужных деталей. Как то так:
Код: sql
1.
2.
3.
create cursor hediag (code c(5), Diag c(10), Age n(3))
insert into hediag ('Z000', 'Общий', 14)
insert into hediag ('Z001', 'Текущий', 19)


чтоб можно было скопировать и запустить.
Кстати откуда у тебя hediag взялся? Изначально была речь о pacient, sluch и curs1
вот их и выложи. По 3-4 строчки каждый. И пиши чего в итоге хочешь получить. А то все мутно и непонятно у тебя, мысли твои никто читать не умеет, телепаты на каникулах :)
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / проверить соответствие кода / 25 сообщений из 55, страница 1 из 3
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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