Обработка указателя при обновлении значения ключа в rpgle

мой код выглядит так:

femp        uf   e           k disk                   
dvar1             s              5p 0                
c     *loval        setll     emp                   
c                   read      emp                   
c                   dow       not %eof(emp)         
C                   eval      ecode = ecode + 10     
c                   eval      var1=ecode             
c                   update    recemp               

c     var1          setgt     emp                   
c                   read      emp                   
c                   enddo                            
c                   eval      *inlr=*on

Вот файл с именем emp с именем формата записи recemp с ecode в качестве ключа...

Теперь, когда я читаю файл, а затем обновляю ecode без использования setgt... указатель не движется вперед, он много раз обновляет одно и то же значение ecode...

Теперь, когда я использую указатель set gt, он выбирает следующую запись, но он не работает, когда два значения ecode совпадают... иначе он также не будет работать с нисходящими значениями ключа...

Есть ли какое-либо решение, чтобы я мог установить указатель независимо от того, одинаковы ли значения, по возрастанию или по убыванию.


person abhinav singh    schedule 23.04.2010    source источник
comment
Что вы пытаетесь сделать здесь? Что содержит var1? Можете ли вы уточнить свой вопрос немного больше?   -  person Mike Wills    schedule 23.04.2010
comment
здесь на самом деле я пытаюсь обновить значение ключа, поэтому для установки указателя я поместил значение обновленного ключа в var1.....   -  person abhinav singh    schedule 26.04.2010


Ответы (2)


Вы хотите обновить поле «ecode» в каждой записи в файле «emp» — это правильно? Если это так, просто используйте другое «чтение» без «setgt», и все будет в порядке.

uf e k disk
c *loval setll emp
c read emp
c dow not %eof(emp)
C eval ecode = ecode + 10
c update recemp

c read emp

c enddo
c eval *inlr=*on 
person karol.mlot    schedule 23.04.2010
comment
нет, дорогой, это не работает, программа показывает какое-то ненормальное поведение, она много раз обновляет одно и то же значение .... я думаю, что когда мы меняем значение ключа каждый раз, когда изменяется путь доступа, вот почему указатель не устанавливается в соответствующую позицию. .. есть ли способ справиться с этим ... спасибо - person abhinav singh; 26.04.2010

Если вы хотите обновить значение ключа в каждой записи, вы должны открыть файл в последовательности прибытия (не используйте «k» в F-спецификации). Кроме того, не используйте SETGT внутри цикла, если вы специально не пытаетесь пропустить записи.

person John Y    schedule 28.04.2010