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

问题描述

我正在尝试使用以下 iconv 命令将大型机文件转换为 Unix 可读格式。
iconv -f IBM-037 -t ISO8859-1 FileA > FileB

此命令按预期转换数据,但将输出数据写入一行。 有人可以帮忙处理这种文件格式转换吗?

解决方法

@Steve Ives,您可以一步完成,消除中间文件和几个 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。这是无法改变的。但就您而言,这很好。

,

我猜您将 二进制 中的数据从 z/OS 传输到 UNIX,然后在 UNIX 端使用 iconv。 z/OS 数据集记录上没有行结束字符,因此iconv可以转换为行结束字符的数据中没有任何内容。

您需要以ASCII传输。 FTP 将负责翻译, 将插入行结束符。

如果 z/OS 上的 FTP 服务器上设置的 fefault 不是您所需要的,您可以设置影响用于翻译的代码页:

quote site sbdataconn=(*host-code-page*,*network-(unix)-code-page*)

默认的行尾字符是 0x0d0a。您可以使用

更改此设置
quote site sbsendeol=NL
                     CR
                     CRLF  (default)
                     NONE
,

如前所述,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,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         
//*      

                                                             
             

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...