C# 控制IBM大型机中新线的出现

C# 控制IBM大型机中新线的出现,c#,text,formatting,mainframe,C#,Text,Formatting,Mainframe,全部, 所以我将一个文本文件从C上传到IBMMVS大型机。该文件使用C库转换为ebcdic,它工作良好,因为我可以在大型机上读取数据。问题是新线路。文本文件有10行数据,在大型机环境中查看时,所有数据都存在。但是没有新行,因为它将文本文件中的每一行翻译为0D25,即CRLF。此段显示为。。在屏幕上。 我不希望2个点的十六进制读数为0D25,因为我需要它来实际地将数据放在下一行,就像它在文本文件中一样。顺便说一句,该文件在大型机上是可变块长的。在MVS上查看上传的文件时,如何实现与文本文件相同的格

全部,

所以我将一个文本文件从C上传到IBMMVS大型机。该文件使用C库转换为ebcdic,它工作良好,因为我可以在大型机上读取数据。问题是新线路。文本文件有10行数据,在大型机环境中查看时,所有数据都存在。但是没有新行,因为它将文本文件中的每一行翻译为0D25,即CRLF。此段显示为。。在屏幕上。 我不希望2个点的十六进制读数为0D25,因为我需要它来实际地将数据放在下一行,就像它在文本文件中一样。顺便说一句,该文件在大型机上是可变块长的。在MVS上查看上传的文件时,如何实现与文本文件相同的格式

例如: 文本文件视图

12345 23456 12346

IBM大型机视图

12345..23456..12346

或者如果已达到块长度

12345..2345 6..12346


谢谢

如果您在FTP传输过程之外进行ASCII-EBCDIC转换,我必须假设您正在以二进制模式传输,否则将再次进行转换,并且您的数据将变差

如果是这样的话,那么我很确定你自己也要对行尾的转换负责。二进制传输不会尝试转换行尾。在将行发送到主机之前,您需要将行填充到所需的长度,并删除所有行端点

例如,如果您传输此文件:

12345
67890
在二进制模式下,使用literal site recfm=vb,您将在启用十六进制的ISPF编辑器中看到以下内容:

您可以看到它只是按原样传输字节,包括CR/LF。如果您在FTP中切换到ASCII模式并再次上载,您将获得:

000001 12345        
       FFFFF44444444
       1234500000000
--------------------
000002 67890        
       FFFFF44444444
       6789000000000
--------------------
在这里,字符已转换为右EBCDIC代码点,行尾已变形为EBCDIC空格填充

我想我要问你的第一个问题是:你为什么在FTP之外做翻译

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

如果必须在客户机上进行转换并以二进制模式传输,则必须让客户机也进行行尾转换和填充,或者在传输后对文件进行后处理,例如使用REXX脚本

如果您不知道目标数据集的属性是什么,例如如果您正在向PDS中的成员传输数据,则后一种选项可能是唯一可行的选项

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