将可变大小的字符串写入 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)
)
我正在 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)
)