用于 SYSPRINT 或 SYSOUT 直接显示的大型机 Unix 代码页

问题描述

您好,这是我向 StackOverflow 提出的第一个问题,不确定论坛和主题

在参与使用 Visual Studio Code 和适用于 Unix 的 Putty 的开放大型机计划时,我在 COBOL 中开发了一个示例程序,用于显示国际俗语(目前为德语、英语、法语、西班牙语、拉丁语)。它可以通过 JCL 批量处理文件并从 REXX 调用。在文件中,我看不到非英语的特殊字符,但我幸运地使用了 PL/1 中的双程序(执行相同操作并在 REXX 中显示特殊字符)。

现在我的问题是:我还尝试通过 Unix bash 脚本中的 mvscmd 进行调用。到目前为止它有效,但不要向我展示特殊字符。好的,我有最后一次从 Python 调用 mvscmd 的机会。或者,我可以将文件从 MVS 传输到 unix(出于任何原因,然后它会自动转换,我会看到我的特殊字符内容)。 处理的地方在哪里?科博尔? (正如我所说,无论出于何种原因,PL/1 都可以。我只在 PL/1 中使用标准放置编辑,而在 Cobol 中显示)。转换 Sysprint/Sysout? 有专家可以帮助我吗?

解决方法

您好,很抱歉重播晚了。好吧,整个代码有点多,但我想我的问题如下 - 在 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 diplay。我可以使用固定字符串或我从 MVS 文件中读取的说法)。使用 PL/1 程序时,最后一个文件是 sysprint,因为 PL/1 是通过 PUT EDIT 制作的。

我认为我的代码页非常错误。但我不知道如何修复。我在 shell 中使用了一些设置,但 LANG 仍然在 C 上???顺便说一下,这个 Unix 似乎很旧,我只有八月才有机会使用它。 我的主要兴趣是在大型机和 JCL 和/或 REXX 中使用该程序。 但是他们也给了我们这个嵌入式 Unix (?) 的机会,所以我想尝试一下。 直接从 COBOL 程序 Sysout 到 Unix 终端。

我的意思是在大型机上执行程序然后在 PF3 的 ISPF(旧东西)编辑器中查看结果文件时,我可以看到德语、西班牙语和法语特殊字符。所以它们似乎就在那里,由 COBOL 和 PL/1 生成。

当通过 MVSCMD 将 MVS 文件(一种 PDS)传输到 UNIX 时,它也很好(特殊字符)但那不是我想要的。

我尝试使用 Python 而不是扁平外壳,但它变得更糟。我无法将 Sysout 定向到终端,Python 能够调用的所有内容都在大型机和 MVS 文件系统上。所以我必须在之后转移它。当 call say 7 谚语时,我的眼睛开销太大,我希望它们显示在 Unix 终端中,哈哈。

,

这是我的 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)"

现在是另一个 Load,PL/1 - 但 COBOL 对 Sysout 执行相同的操作,而不是 Sysprint。

它显示在我的 REXX 终端中,也由 ISPF 调用,然后在编辑面板中显示为 3.4。该程序没有手动输入,而是读取文件。是的,这里没有分配这些说法,我通过动态分配读取它们,但我的字符串从哪里进入 DISPLAY / PUT EDIT 并不重要

,

现在是 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 代码页。