2012-05-29 2 views
0

Теперь мне нужно найти конкретную запись в журнале с помощью программы CL. Способ, которым я использую его, - это DSPJRNE, чтобы помещать записи журнала в выходной файл, а затем использовать OPNQRYF для фильтрации желаемого. Файл уникален, поэтому мой план состоит в том, чтобы сравнить данные записи журнала с ключом. Проблема в том, что один из ключей - упакованный десятичный знак, поэтому в записи журнала он рассматривается как шестнадцатеричный код символов и отображается как некоторые странные символы. Поэтому, чтобы сравнить строки, мне нужно преобразовать упакованный десятичный ключ в соответствующие символы. Как достичь этого в CL? Если использование CL невозможно, а как насчет RPG?Учитывая шестнадцатеричный код символа, как его преобразовать в соответствующий символ в программе CL?

ответ

2

Чтобы ответить на ваш немедленный вопрос, инструкция CVTCH MI преобразует шестигранник но я не пошел бы по этому пути; ни в CL, ни в RPG. Скорее, я бы посоветовал Джеймсу несколько дополнительных шагов.

DSPJRNE OUTFILE(QTEMP/DSPJRNE) 
QRY input file DSPJRNE, output file QRYJRNE, select only JOESD 
CRTDUPOBJ PRODUCTION_FILE QTEMP/JRNF DATA(*NO) 
CPYF QRYJRNE JRNF FMTOPT(*NOCHK) 

Это даст вам внешний файл с тем же самым расположением, что и ваш производственный файл. Вы можете запросить это и т. Д.

+0

У Dieter Bender есть инструмент, который сделает это за вас: http://www.bender-dv.de/index.html –

+0

Почему CVTCH MI не рекомендуется? Является ли прямая копия записи журнала в файл производства действительно собирающимся правильно выровнять данные в соответствии с полями? –

+1

Что вы будете делать с записью, как только вы ее найдете? Распечатать обновленный отчет записей? Что, если вы не найдете его по ключевому слову, и вам нужно посмотреть на другие столбцы? Наличие во внешнем файле более гибкое, чем поиск грубой силы по столбцу и CVTCH, на мой взгляд. Что касается CPYF, да, он точно выравнивает поля. Не используйте CPYF для своего производственного файла !!!!! CPYF для дублированной копии. –

1

Если вы тянете записи журнала для конкретного файла вы можете сбросить их в описанном извне файл с умным использованием SQL:

CREATE TABLE QTEMP/QADSPJRN LIKE QSYS/QADSPJRN 

ALTER TABLE QTEMP/QADSPJRN DROP COLUMN JOESD 

CREATE TABLE QTEMP/DSPJRNE AS (SELECT * FROM QTEMP/QADSPJRN, FILE-LIB/FILE) 
WITH NO DATA 

DSPJRNE ... OUTPUT(*OUTFILE) OUTFILFMT(*TYPE1) OUTFILE(QTEMP/DSPJRNE) 
ENDDTALEN(*CALC) 
+0

Ну, я уже знаю, как сбрасывать все записи в файл. Проблема заключается в том, как найти эту конкретную запись, которую я ищу. –

+0

Возможно, я не понимаю вопроса. После того, как вы получите журнал во внешний файл, это просто вопрос запроса на основе поля/значения, которое вы ищете. Накладывая буфер записи на внешние описания, все преобразования обрабатываются для вас. – jamesallman

+0

Джеймс, я думаю, он ищет, чтобы разобрать упакованные поля внутри JOESD. –