通过FTP/FTPS在主机可变块文件中写入数据

通过FTP/FTPS在主机可变块文件中写入数据,ftp,mainframe,ftps,Ftp,Mainframe,Ftps,大型机中变量块文件的前4个字节包含有关记录和块的信息。我能够通过FTP或FTPS从大型机的可变块文件中读取数据。但是,当我试图写回数据时,如果我没有在每个记录中添加空格,那么数据就是混乱的。只有在每条记录中添加空格,才能得到预期的输出。有什么方法可以将记录信息写入可变块文件的前四个字节中吗?不清楚您到底在做什么和试图完成什么。我假设您通过FTP从VB(或者可能是VBS)大型机数据集中获取了一些数据。然后在非大型机平台上处理,然后通过FTP将其传输回来 如果您希望能够在平台外成功读取块和记录长度,

大型机中变量块文件的前4个字节包含有关记录和块的信息。我能够通过FTP或FTPS从大型机的可变块文件中读取数据。但是,当我试图写回数据时,如果我没有在每个记录中添加空格,那么数据就是混乱的。只有在每条记录中添加空格,才能得到预期的输出。有什么方法可以将记录信息写入可变块文件的前四个字节中吗?

不清楚您到底在做什么和试图完成什么。我假设您通过FTP从VB(或者可能是VBS)大型机数据集中获取了一些数据。然后在非大型机平台上处理,然后通过FTP将其传输回来

如果您希望能够在平台外成功读取块和记录长度,则需要在FTP作业中使用RECFM=U引用大型机数据集。请注意,这需要您从大型机端启动FTP,我认为您无法从VB(S)文件执行FTP获取并保留块/记录长度。但是,您可以先将大型机上的文件复制到RECFM=U文件,然后通过FTP将其关闭。同样,需要在大型机端采取措施来调整数据以供您使用

当你把它放回去时,你可能会遇到类似的问题。坦白地说,我还没有试着通过输入RECFM=VB文件来了解大型机FTP服务器是否会在默认情况下为您正确地设置记录/块长度,但听起来可能不是这样。因此,如果您必须在执行回放到大型机之前以编程方式管理非平台代码中的记录/块长度(这可能不像听起来那么简单),那么我猜您必须将其放到一个已经具有正确RECFM的预分配文件中。您可能能够使用quote site命令(IIRC)正确分配新数据集,但我也没有尝试过

简而言之,RECFM=U可以获得块/记录长度,将它们放回可能更为棘手。但我不太确定那个方向


根据您的具体操作,在大型机上就地处理数据可能会更容易。特别是如果您的代码是Java:IBM提供了JZOS类,这使得在大型机上读取大型机数据集非常容易。

请改进您的问题-这很难理解。你用什么语言编程?您的数据看起来如何?初始字段中应该是什么?你的代码在哪里?请准确地说明你在做什么。您是否使用像curl这样的包以编程方式使用FTP协议?您是否使用FTP作为开始步骤和结束步骤,中间处理?MarkSetchell是正确的,你所说的毫无意义。你使用什么FTP命令?您是在写入现有数据集还是在创建新数据集?ftps.site(“QUOTE RDW”);binp=新的BufferedInputStream(ftps.retrieveFileStream(fileSrc));最后一个字节[]bufLen=新字节[4];int readLen=binp.read(bufLen,0,4);while(readLen!=-1){ByteArrayInputStream ba2=new ByteArrayInputStream(bufLen,0,4);int z=ba2.read();int reclen=0;int li=0;while(z!=-1){//仅前2个字节表示记录的长度。if(li==0)reclen+=z*256;else if(li==1)reclen+=z;z=ba2.read();z=ba2.close();reclen-=4;readLen=binp.read(新字节[reclen],0,reclen);readLen=binp.read(bufLen,0,4);//read length-RDW}我在大型机平台上使用JZOS类读写VB文件。但在当前的场景中,我需要通过FTP读取VB,并在Windows平台中进行处理,然后再次通过FTP以相同的顺序写回VB文件。目前,我能够读取VB文件的每个记录长度,但如果我不在VB文件中添加空格,则在写回时,数据会混乱