将可变大小的字符串写入 IFS 文件

Writing into IFS file a variable size string

我正在 iSeries IFS 中写入文件。

我的变量File_Data是一个32000A,所以当我使用

CallP     Write(FileD           :  
               %Addr(File_Data) : 
               %Size(File_Data) )  

当变量未填充 32K 个字符时,我发现一些无用的空间。 我尝试使用 %Trim 但出现错误。

为了绕过这个问题,我这样做了:

 For       Counter = 1 To %Len(%Trim(File_Data))        
 Eval      SingleChar = %SubSt(File_Data : Counter : 1) 
 CallP     Write(FileD           :                      
                %Addr(SingleChar) :                     
                %Size(SingleChar) )                     
 EndFor                                                 

有更好的方法吗?因为很慢。

考虑到您的解决方案使用 %trim(trim 两边)但是从 char 1 写入 file_data 那么开头必须没有 space。所以你可以改用 %trimr 来简化问题。

您想要的是告诉 write() 要写入的数据长度:这应该可以完成工作

CallP     Write(FileD           :  
               %Addr(File_Data) : 
               %len(%trimr(File_Data))
          )  

但如果您编写的程序也构建内容,那么也许您可以将 file_data 声明为 varchar。它会跟踪数据的实际长度,最后你可以写

CallP     Write(FileD           :  
               %Addr(File_Data:*data) : 
               %len(File_Data)
          )