Connect: прямой синтаксис в мейнфрейме IBM z/OS

Я пишу программу на C# для анализа файла Connect:Direct и извлечения из него информации об источнике и месте назначения.

Я не очень хорошо владею кодом мэйнфрейма. В частности, я пытаюсь понять синтаксис пути назначения Windows. Следующее - моя интерпретация, но есть дыры, которые я хочу заполнить, чтобы написать синтаксический анализатор, способный обрабатывать любые допустимые изменения синтаксиса, с которыми я могу столкнуться.

Символ обратной косой черты должен быть escape-символом, так что две обратной косой черты представляют один. Однако операция конкатенации, ||, кажется, бросить гаечный ключ в этом. Я предполагаю, что символ косой черты является символом продолжения строки. Указанный путь также заключен в обратную косую черту с каждой стороны. Я не уверен, что это означает. Я предполагаю, что это может означать, что вложенная строка содержит escape-символы, предполагая, что две обратных косых черты должны равняться одному.

NDMHGM30 PROCESS  SNODE=MYSNODE PACCT='G,HG1'                  -
 &SUBS=SUBSYS(ESP2)                                                 -
 &DMNDH=ESPM2D.DEMANDH                                              -
 &APPL=APPL(STHG102M.0)
STEP1  COPY FROM (PNODE DSN=GIO.HG1.CDB.ACCTEXT.T1(0)               -
               DISP=SHR)                                            -
       COMPRESS EXT                                                 -
       TO (SNODE                                                    -
 DSN=\'\\\\MyServerName\\IMDATA\\CLASS_SOURCE\\SYSTEM_INPUTS\   ||  -
     \\\CDB\\ACCOUNT.TXT'\                                      -
       SYSOPTS="STRIP.BLANKS(NO)"                                   -
               DISP=RPL)
   IF ( STEP1=0 ) THEN
STEP1A   RUN TASK (PGM=ESP,                                         -
 PARM=("&SUBS NOSTACK;AJ USERREQ.GHG30GOD &APPL COMPLETE;END"))
    ELSE
STEP1B   RUN TASK (PGM=ESP,                                         -
 PARM=("&SUBS NOSTACK;TR &DMNDH USER1('GHG30BAD');END"))
   EIF

Есть какие-то неверные предположения?

Учитывая это, я ожидаю, что вышеуказанный путь будет недействительным, потому что он будет интерпретирован как

\\MyServerName\IMDATA\CLASS_SOURCE\SYSTEM_INPUTS\\CDB\ACCOUNT.TXT

Другими словами, на одном из уровней будет дополнительный обратный слеш. Но я знаю, что Connect Direct работает и правильно интерпретирует путь как

\\MyServerName\IMDATA\CLASS_SOURCE\SYSTEM_INPUTS\CDB\ACCOUNT.TXT

Как оператор конкатенации и / или продолжения строки влияет на количество косых черт, которые здесь необходимы? Какие другие синтаксические переменные также могут быть действительными, что приведет к тому же правильному пути Windows?

1 ответ

Решение

Из документации (Руководство пользователя IBM Sterling Connect:Direct for z/OS):

Брекетинг специального назначения

Вы должны часто поддерживать специальные символы как часть строки. Чтобы сохранить специальные символы, заключите строку в символы в скобках. Символы, заключенные в квадратные скобки: обратная косая черта (\), одинарные кавычки (') и двойные кавычки (").

Брекетинг-слэши являются индикаторами специальной обработки строки символов.

Sterling Connect: Direct не поддерживает их как часть строки в своем окончательном разрешении. Используйте скобки для обратной косой черты, чтобы:

1 Продолжить строку, содержащую специальные символы в нескольких строках

2 Убедитесь, что кавычки в строке сохраняются

Ниже приведен пример использования обратных скобок в команде: PACCT=\ 'DEPT \ MIS \ || -
\ 602' \

Sterling Connect: Direct разрешает команду следующим образом:

PACCT = 'DEPT\MIS602'

Объедините это с этим справочником (Руководство по системе Sterling Connect: Direct для Microsoft Windows - оно, вероятно, также подробно описано в документации Windows для Connect:Direct).

Службы Microsoft Windows рассматривают обратную косую черту (\) как escape-символ, поэтому введите две обратной косой черты для каждой обратной косой черты в пути к файлу.

Строка, которую вы хотите понять, такова:

 DSN=\'\\\\MyServerName\\IMDATA\\CLASS_SOURCE\\SYSTEM_INPUTS\   ||  -
     \\\CDB\\ACCOUNT.TXT'\

В каждой из этих двух строк первая и последняя обратная косая черта (\) по этой причине:

Продолжить строку, содержащую специальные символы в нескольких строках

а также

Sterling Connect: Direct не поддерживает их как часть строки в своем окончательном разрешении

Sterling Connect: Direct разрешит это так:

 DSN='\\\\MyServerName\\IMDATA\\CLASS_SOURCE\\SYSTEM_INPUTS\\CDB\\ACCOUNT.TXT'

Windows будет представлен

 \\\\MyServerName\\IMDATA\\CLASS_SOURCE\\SYSTEM_INPUTS\\CDB\\ACCOUNT.TXT'

И тогда Windows выполнит escape-обработку, предоставив вам следующее:

 \\MyServerName\IMDATA\CLASS_SOURCE\SYSTEM_INPUTS\CDB\ACCOUNT.TXT

Это конкретное использование обратной косой черты (\) обусловлено наличием символа продолжения (- как последний символ в строке) и наличием специальных символов (что указано в документации), а не использование конкатенации (||) (которая, для информации, является любым символом в наборе символов, который вы используете, является X'4F', который не обязательно является символом |).

Вся документация Sterling Connect: Direct для всех платформ находится в свободном доступе в Информационном центре IBM, ее можно использовать непосредственно онлайн или загружать в формате PDF. Твой выбор. Просто выберите ваш любимый поисковик и найдите документацию для ваших версий продукта.

Другие вопросы по тегам