0

我正在编写一个 C# 程序来解析 Connect:Direct 文件并从中提取源和目标信息。

我对大型机代码不是很流利。特别是,我试图了解目标 Windows 路径的语法。以下是我的解释,但我想填补一些漏洞,以便编写一个能够处理我可能遇到的任何有效语法变化的解析器。

反斜杠字符必须是转义字符,以便两个反斜杠代表一个。然而,串联操作,|| ,似乎在里面扔了一个活动扳手。我假设斜杠字符是行继续字符。引用的路径也在每一侧都用反斜杠括起来。我不确定这表明了什么。我猜这可能意味着封闭的字符串包含转义字符,表明两个反斜杠应该等于一个。

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 路径?

4

1 回答 1

1

从文档(IBM Sterling Connect:Direct for z/OS 用户指南):

特殊用途包围

您必须经常维护特殊字符作为字符串的一部分。要保留特殊字符,请将字符串括在括号字符中。括号字符是反斜杠 (\)、单引号 (') 和双引号 (")。

括号反斜杠是字符串特殊处理的指示符。

Sterling Connect:Direct 在最终解析时不会将它们作为字符串的一部分进行维护。使用括号反斜杠来:

1 跨多行继续包含特殊字符的字符串

2 确保保留字符串中的引号

以下是在命令中使用括号反斜杠的示例: PACCT=\'DEPT\MIS\ || -
\602'\

Sterling Connect:Direct 将命令解析如下:

PACCT='部门\MIS602'</p>

将其与此参考(Sterling Connect:Direct for Microsoft Windows System Guide - 它可能在 Connect:Direct 的Windows文档中的其他地方也有详细说明)

Microsoft Windows 服务将反斜杠 (\) 视为转义字符,因此为文件路径中的每个反斜杠键入两个反斜杠。

您要了解的行是这样的:

 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将进行转义处理,为您提供以下信息:

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

反斜杠 (\) 的这种特殊用法是由于存在连续字符(- 作为行上的最后一个字符)和特殊字符(文档中列出的内容),而不是由于使用串联 (||)(作为信息,它是您使用的字符集中的任何符号 X'4F',不一定是 | 符号)。

所有平台的所有Sterling Connect:Direct文档都可从 IBM 信息中心免费获得,可直接在线使用或以 PDF 格式下载。你的选择。只需选择您最喜欢的搜索引擎,然后找到您的产品版本的文档。

于 2016-01-14T11:54:10.730 回答