你好,这是我对StackOverflow的第一个问题,不确定论坛和话题。
在参与一个使用Visual Studio Code和Putty for Unix的开放大型机计划时,我用COBOL开发了一个示例程序,显示了国际上的说法(德语、英语、法语、西班牙语、拉丁语)。它通过批处理、JCL到文件和从REXX调用来工作得很好。在文件中,我看不到非英语的特殊字符,但我幸运地用PL/1编写了一个双程序(做同样的事情,并在REXX中显示特殊字符)。
现在我的问题是:我还尝试从Unix bash脚本中通过mvscmd进行调用。到目前为止它是有效的,但是不要给我看特殊的字符。好了,我还有最后一次从Python调用mvscmd的机会。或者,我也可以将文件从MVS传输到unix (无论出于什么原因,它都会自动转换,我会看到我的特殊字符内容)。哪里是处理的地方?Cobol?(正如我所说的,由于任何原因,PL/1都可以。我只使用PL/1中的标准put编辑,而不是Cobol中的显示)。转换Sysprint/Sysout?有专家可以帮我吗?
发布于 2021-07-17 01:56:44
你好,很抱歉重播的时间太晚了。好的,整个代码有点多,但我想我的问题是:直接在shell脚本中编码MVSCMD
#!/bin/sh
parm='Z08800.FYD.DATA'
#echo "arg1=>"$1"<"
[ ! -z "$1" ] && parm=$parm","$1
#echo "arg2=>"$2"<"
[ ! -z "$2" ] && parm=$parm","$2
#echo "parm=>"$parm"<"
mvscmd --pgm=saycob --args=$parm \
--steplib='z08800.fyd.load' \
--sysin=dummy \
--sysout=*我有更多的shell脚本,但这是主要的。我直接把它放到sysout (这是COBOL显示)。我可以使用固定字符串或我说的从MVS文件中读取)。当使用PL/1程序时,最后一个文件是sysprint,因为PL/1是通过PUT EDIT生成的。
我假设我的代码页是非常错误的。但是我不知道怎么修理。我在shell中使用了一些设置,但LANG仍然使用C?顺便说一下,这个Unix似乎很旧了,我只有机会用到8月份。我的主要兴趣是在大型机和JCL和/或REXX中使用该程序。但是他们给了我们机会使用这个嵌入式Unix (?)我也想试一试。将Sysout从COBOL程序定向到Unix终端。
我的意思是,当在大型机上执行程序,然后通过PF3在ISPF (旧的东西)编辑器中查看结果文件时,我可以看到德语、西班牙语和法语的特殊字符。它们似乎就在那里,由COBOL和PL/1产生。
当通过MVSCMD将MVS文件(类似PDS)传输到UNIX中时,它也是正常的(特殊字符),但这不是我想要的。
我试着用Python代替扁平shell,但它变得更糟。我不能将Sysout定向到终端,Python所能调用的都是大型机上的MVS文件系统。所以之后我得把它转过来。这是在我的眼睛有太多的开销,当调用比方说7句话,我希望他们显示在Unix终端哈哈。
发布于 2021-07-17 02:08:15
下面是我的REXX正在做的事情
/* rexx */
ARG PARM1 PARM2
PARAMETER = '/Z08800.FYD.DATA'
If Length(PARM1) > 0
Then PARAMETER = PARAMETER","PARM1
If Length(PARM2) > 0
Then PARAMETER = PARAMETER","PARM2
PARAMETER = "'"PARAMETER"'"
Address TSO "Alloc File(sysprint) Dataset(*)"
Address TSO "Alloc File(sysin) Dummy"
Address TSO "Call fyd.load(saypli)" PARAMETER
Address TSO "Free File(sysprint)"
Address TSO "Free File(sysin)"现在是另一个加载,PL/1 -但是COBOL使用Sysout而不是Sysprint执行相同的操作。
它显示在我的REXX终端中,ISPF也调用它,然后在编辑面板中调用3.4。该程序没有手动输入,但读取文件。是的,格言不是在这里分配的,我是通过动态分配来读取它们的,但我的字符串从哪里进入显示/ PUT编辑并不重要
发布于 2021-07-17 02:14:14
现在这个是JCL。OK的工作方式几乎没有什么不同,它存储到PDS成员
//SAYCOB JOB
//COBCLG EXEC IGYWCLG,
// PARM.GO='Z08800.FYD.DATA'
// SET MBR=SAYCOB
//COBOL.SYSIN DD DSN=&SYSUID..FYD.SOURCE(&MBR),DISP=SHR
//LKED.SYSLMOD DD DSN=&SYSUID..FYD.LOAD(&MBR),DISP=SHR
//GO.SYSOUT DD SYSOUT=*
//*-------------------------------------------------------------
//*
//*-------------------------------------------------------------
//SAYCOB EXEC PGM=&MBR,PARM='Z08800.FYD.DATA,001,007'
//STEPLIB DD DSN=&SYSUID..FYD.LOAD,DISP=SHR
//SYSOUT DD DSN=&SYSUID..FYD.OUTPUT(&MBR),DISP=SHR
//*-------------------------------------------------------------
//LIST EXEC PGM=LINE80,PARM='/80'
//STEPLIB DD DSN=&SYSUID..FYD.LOAD,DISP=SHR
//SYSIN DD DSN=&SYSUID..FYD.OUTPUT(&MBR),DISP=SHR
//SYSPRINT DD SYSOUT=*
//在这里的参数中,我为它们提供了我所说的库,然后我通过PL/1或COBOL进行分配。我当然可以展示,但是有点多,大约200行……我想问题不在于MVS,而在于Unix代码页。
https://stackoverflow.com/questions/68161214
复制相似问题