控制IBM大型机中新行的外观

时间:2010-08-30 03:47:18

标签: c# text formatting mainframe

所有

所以我将一个文本文件从C#上传到IBM MVS大型机。使用C#库将文件转换为ebcdic,它可以正常工作,因为我可以读取大型机上的数据。问题是新线。文本文件有10行数据,在大型机环境中查看时,所有数据都存在。但是没有新行,因为它将每个新行从文本文件转换为0D25,即CRLF。此栏目在屏幕上显示为.. 我不想要那些具有0D25的十六进制读数的2个点,因为我需要它实际将数据放在下一行,因为它在文本文件中。该文件在主机btw上是可变块长度一次。在MVS上查看上传的文件时,如何实现与文本文件相同的格式?

例如: 文本文件视图

12345
23456个
12346


IBM MAinFrame查看

12345..23456..12346

或者是否已达到块长度..

12345..2345
6..12346

由于

1 个答案:

答案 0 :(得分:4)

如果您在FTP传输过程之外进行ASCII-EBCDIC转换,我必须假设您正在以二进制模式进行转换(否则转换将再次和您的数据会不好的。)

如果是这种情况,那么我很确定你自己也有责任转换行结尾。二进制传输不会尝试转换行结尾。在将线路发送到主机之前,您需要将线路填充到所需长度并完全删除线路结束。

举例来说,如果你转移这个文件:

12345
67890

使用literal site recfm=vb以二进制模式启动,您将得到以下内容(显示在带hex on的ISPF编辑器中):

000001                    
       3333300333330044444
       12345DA67890DA00000
--------------------------

你可以看到它只是原样转移了字节,包括CR / LF。如果您在FTP中切换到ASCII模式并再次上传,则会得到:

000001 12345        
       FFFFF44444444
       1234500000000
--------------------
000002 67890        
       FFFFF44444444
       6789000000000
--------------------

此处,字符已转换为正确的EBCDIC代码点,并且行结尾已变为带有EBCDIC空格的填充。

我想我的第一个问题是:“你为什么要在FTP之外进行翻译?”

IBM投入了大量资金确保它接受各种不同的编码并将其转换为正确的代码页。独立解决方案不太可能适用于所有国际化版本的z / OS以及IBM自己的版本。

如果必须在客户端进行转换并以二进制模式传输,您必须让客户端进行行结束转换和填充,或者在传输后对文件进行后处理,例如使用REXX脚本。

如果您知道目标数据集的属性将是什么(例如,如果您要转移到PDS中的成员),后一个选项可能是唯一可行的选项之一。