iconv将大型机EBCDIC文件转换为Unix可读格式,在一行中写入数据

ix0qys7i  于 2023-05-06  发布在  Unix
关注(0)|答案(4)|浏览(282)

我试图使用下面的iconv命令将大型机文件转换为Unix可读格式。
iconv -f IBM-037 -t ISO 8859 -1文件A〉文件B
此命令按预期转换数据,但将输出数据写入一行。有人可以帮助如何处理这个文件格式转换?

bvhaajcl

bvhaajcl1#

如前所述,z/OS文件中没有CR或LF字符。
我有一个应用程序,需要PHP程序处理一个z/OS文件,所以我使用USS OCOPY命令将文件从z/OS批量复制到USS:

//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进行代码页转换:

//*  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         
//*
yws3nbqq

yws3nbqq2#

我使用以下技术在z/OS数据集上执行iconv:
cat“//'MY.MVS.DATA.SET'"|iconv -f IBM-273 -t UTF-8〉./my.unix.file

yxyvkwin

yxyvkwin3#

@Steve伊韦斯,你可以一步完成,消除中间文件和几个I/O。
在z/OS UNIX中,cp实用程序可以读写(unix)文件以及(MVS)数据集。考虑到这一点,你的工作可以做如下:

//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         
/*
  • 注意 * cp默认假定源代码页是IBM-1047。这是无法改变的。但在你的情况下,这很好。
1tuwyuhd

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

相关问题