全,
因此,我将一个文本文件从C#上传到IBM大型机。使用C#库将文件转换为ebcdic,它运行良好,因为我可以读取大型机上的数据。问题是新的路线。文本文件有10行数据,在大型机环境中查看它时,所有数据都是存在的。但是没有新的行,因为它将文本文件中的每一行转换为0D25,即CRLF。此段显示为..。在屏幕上。
我不希望这两个点的十六进制读数为0D25,因为我需要它实际上将数据放在下一行,因为它是在文本文件中。该文件在大型机上一次是可变的块长度。在MVS上查看上传的文件时,如何实现与文本文件相同的格式?
示例:文本文件视图
12345
23456
12346
IBM MAinFrame MAinFrame
12345.23456.12346
或者如果达到了块长..。
12345.2345
6.12346
谢谢
发布于 2010-08-30 04:51:40
如果您在FTP传输过程之外执行ASCII-EBCDIC转换,我必须假设您是以二进制模式进行传输(否则转换将再次进行,而您的数据将是坏的)。
如果是这样的话,那么我很肯定你也要对行尾的转换负责。二进制传输不会试图转换行结束。在将行发送到主机之前,您需要将行插入到所需的长度,并将行尾全部移除。
例如,如果您传输此文件:
12345
67890在二进制模式下使用literal site recfm=vb,您将得到以下内容(如ISPF编辑器中的hex on所示):
000001
3333300333330044444
12345DA67890DA00000
--------------------------您可以看到它只是以-is形式传输字节,包括CR/LF。如果您在FTP中切换到ASCII模式并再次上传,您将得到:
000001 12345
FFFFF44444444
1234500000000
--------------------
000002 67890
FFFFF44444444
6789000000000
--------------------在这里,字符被转换为右EBCDIC码点,行尾被变形成带有EBCDIC空间的填充。
我想我要问你的第一个问题是:“你为什么要做FTP之外的翻译?”
IBM投入了大量资金,以确保它将接受各种不同的编码,并将它们转换为正确的代码页。一个独立的解决方案不太可能在z/OS的所有国际化版本以及IBM自己的版本上工作。
如果必须在客户端上进行转换并以二进制模式进行传输,则必须让客户端进行行结束转换和填充,或者在传输后对文件进行后处理,例如使用REXX脚本。
如果您不知道目标数据集的属性是什么(例如,如果您正在转移到PDS中的一个成员),则后一个选项可能是唯一可行的选项。
https://stackoverflow.com/questions/3597735
复制相似问题