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. Твой выбор. Просто выберите ваш любимый поисковик и найдите документацию для ваших версий продукта.