我试图使用下面的iconv命令将大型机文件转换为Unix可读格式。iconv -f IBM-037 -t ISO 8859 -1文件A〉文件B此命令按预期转换数据,但将输出数据写入一行。有人可以帮助如何处理这个文件格式转换?
bvhaajcl1#
如前所述,z/OS文件中没有CR或LF字符。我有一个应用程序,需要PHP程序处理一个z/OS文件,所以我使用USS OCOPY命令将文件从z/OS批量复制到USS:
OCOPY
//COPYMCA EXEC PGM=IKJEFT01 //* //MVS DD DISP=SHR,DSN=P.OPS.CA7GRAPH.MCAWKLY.REPORT MCA Data //* //HFS DD PATH='/u/jocs065/ihsconfig/ihs/jocs065/cgi-bin/phpNoSecure/ // MCAWKLY_EBC.txt', // PATHDISP=(KEEP,DELETE), // PATHOPTS=(OWRONLY,OCREAT), Add OEXCL to fail if exists // PATHMODE=(SIRUSR,SIWUSR,SIROTH) //* //SYSTSPRT DD SYSOUT=* //SYSTSIN DD * OCOPY INDD(MVS) OUTDD(HFS) TEXT CONVERT((BPXFX000))
然后执行第二步,运行iconv进行代码页转换:
iconv
//* Convert USS file to correct character set. //CONVERT EXEC PGM=BPXBATCH,REGION=8M //STDERR DD SYSOUT=* //STDOUT DD SYSOUT=* //STEPLIB DD DISP=SHR,DSN=SYS1.CEE.SCEERUN //* //STDPARM DD * sh /bin/iconv -f IBM-1047 -t ISO8859-1 /u/jocs065/ihsconfig/ihs/jocs065/cgi-bin/phpNoSecure/MCAWKLY_EBC.txt > /u/jocs065/ihsconfig/ihs/jocs065/cgi-bin/phpNoSecure/MCAWKLY.txt //*
yws3nbqq2#
我使用以下技术在z/OS数据集上执行iconv:cat“//'MY.MVS.DATA.SET'"|iconv -f IBM-273 -t UTF-8〉./my.unix.file
yxyvkwin3#
@Steve伊韦斯,你可以一步完成,消除中间文件和几个I/O。在z/OS UNIX中,cp实用程序可以读写(unix)文件以及(MVS)数据集。考虑到这一点,你的工作可以做如下:
cp
//CONVERT EXEC PGM=BPXBATCH,REGION=8M //STDERR DD SYSOUT=* //STDOUT DD SYSOUT=* //STEPLIB DD DISP=SHR,DSN=SYS1.CEE.SCEERUN //* //STDPARM DD * sh /bin/cp -T -O c=iso8859-1 "//'P.OPS.CA7GRAPH.MCAWKLY.REPORT'" /u/jocs065/ihsconfig/ihs/jocs065/cgi-bin/phpNoSecure/MCAWKLY.txt /*
1tuwyuhd4#
我猜您将 binary 格式的数据从z/OS传输到UNIX,然后在UNIX端使用iconv。z/OS * 数据集记录 * 上没有行结束字符,因此iconv无法将数据中的任何内容转换为行结束字符。您需要使用 ASCII 进行传输。FTP将负责翻译,* 和 * 将插入行结束字符。如果在z/OS上的FTP服务器上设置的fefault不是您所需要的,您可以设置influence用于翻译的代码页:
quote site sbdataconn=(*host-code-page*,*network-(unix)-code-page*)
默认行结束字符为0x 0 d 0a。您可以使用更改此设置
quote site sbsendeol=NL CR CRLF (default) NONE
4条答案
按热度按时间bvhaajcl1#
如前所述,z/OS文件中没有CR或LF字符。
我有一个应用程序,需要PHP程序处理一个z/OS文件,所以我使用USS
OCOPY
命令将文件从z/OS批量复制到USS:然后执行第二步,运行
iconv
进行代码页转换:yws3nbqq2#
我使用以下技术在z/OS数据集上执行iconv:
cat“//'MY.MVS.DATA.SET'"|iconv -f IBM-273 -t UTF-8〉./my.unix.file
yxyvkwin3#
@Steve伊韦斯,你可以一步完成,消除中间文件和几个I/O。
在z/OS UNIX中,
cp
实用程序可以读写(unix)文件以及(MVS)数据集。考虑到这一点,你的工作可以做如下:cp
默认假定源代码页是IBM-1047。这是无法改变的。但在你的情况下,这很好。1tuwyuhd4#
我猜您将 binary 格式的数据从z/OS传输到UNIX,然后在UNIX端使用
iconv
。z/OS * 数据集记录 * 上没有行结束字符,因此iconv无法将数据中的任何内容转换为行结束字符。您需要使用 ASCII 进行传输。FTP将负责翻译,* 和 * 将插入行结束字符。
如果在z/OS上的FTP服务器上设置的fefault不是您所需要的,您可以设置influence用于翻译的代码页:
默认行结束字符为0x 0 d 0a。您可以使用更改此设置