【问题标题】:Writing into IFS file a variable size string将可变大小的字符串写入 IFS 文件
【发布时间】:2021-10-20 06:45:36
【问题描述】:

我正在 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                                                 

有没有更好的方法来做到这一点?因为速度很慢。

【问题讨论】:

    标签: ibm-midrange rpgle ifs rpg


    【解决方案1】:

    考虑到您的解决方案使用 %trim(修剪两边)但从 char 1 写入 file_data,那么开头必须没有空格。因此,您可以改用 %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)
              )  
    

    【讨论】:

    • 我理解我的第一个错误...我使用了%SIZE(%Trimr(File_data)) 而不是%LEN
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多