Ibm midrange 如何从IFS下载文本文件的最后一行删除CRLF

Ibm midrange 如何从IFS下载文本文件的最后一行删除CRLF,ibm-midrange,cobol,cl,Ibm Midrange,Cobol,Cl,我使用CPYTOIMPF下载了一个文本文件,其中记录分隔符为CRLF。根据要求,除最后一行不应有任何分隔符外,CRLF分隔符适用于所有行。由于此命令自动将分隔符添加到所有行中,如何控制最后一行的分隔符?文本文件末尾不应有任何新行 CPYTOIMPF FROMFILE(测试文件*第一个) TOSTMF('/TEST.TXT') 来自CCSID(874)STMFCODPAG(874)RCDDLM(*CRLF)的MBROPT(*替换) STRDLM(*无)RMVBLANK(*尾部)FLDDLM(','

我使用CPYTOIMPF下载了一个文本文件,其中记录分隔符为CRLF。根据要求,除最后一行不应有任何分隔符外,CRLF分隔符适用于所有行。由于此命令自动将分隔符添加到所有行中,如何控制最后一行的分隔符?文本文件末尾不应有任何新行

CPYTOIMPF FROMFILE(测试文件*第一个) TOSTMF('/TEST.TXT') 来自CCSID(874)STMFCODPAG(874)RCDDLM(*CRLF)的MBROPT(*替换) STRDLM(*无)RMVBLANK(*尾部)FLDDLM(',')
ORDERBY(*NONE)ADDCOLNAM(*NONE)

可通过yum或up2date从coreutils gnu包获得truncate命令。这样可以很容易地调整答案,并从文件末尾减去CRLF的2个字节:

truncate -s-2 /TEST.TXT

truncate命令可通过yum从coreutils gnu包获得。这样可以很容易地调整答案,并从文件末尾减去CRLF的2个字节:

truncate -s-2 /TEST.TXT

“文本文件末尾不应该有任何新行”-为什么不?最后一个“记录”中具有EOL的CRLF(或LF)可能无法在所有环境中正确处理,因此肯定应该存在[CR]LFthere@SimonSobisch是,正常情况下,EOL应存在。但是根据这一要求,客户端系统只支持最后一行,不支持EOLI,我不清楚如何从CL调用API,因为我通常从RPG调用API,但是服务文件QP0LLIB1中的函数应该能够做到这一点。将当前文件长度-2传递给它,它会切掉最后两个字符。熟悉Unix/Linux命令的人可能会推荐一些您可以从QSH或PASE中使用的东西。那只不过是一艘班轮而已。确保
sed
可用。更方便的是
truncate
命令,但我不认为ibmi附带该命令。另外,如果您熟悉Perl、Python或Node.js,您可以非常轻松地安装其中一个并使用它(如果安装了
yum
,那么您已经有了Perl和Python 2;Node.js和Python 3是一个附加但非常简单的步骤)。@JohnY是的,我已经尝试过sed。使用sed,我可以删除*CR,但sed在末尾添加*LF。我又回到原点了。sed'$s/\r\n/'SAMP1.txt>RESULT1.txt“文本文件末尾不应该有任何新行”-为什么不?最后一个“记录”中具有EOL的CRLF(或LF)可能无法在所有环境中正确处理,因此肯定应该存在[CR]LFthere@SimonSobisch是,正常情况下,EOL应存在。但是根据这一要求,客户端系统只支持最后一行,不支持EOLI,我不清楚如何从CL调用API,因为我通常从RPG调用API,但是服务文件QP0LLIB1中的函数应该能够做到这一点。将当前文件长度-2传递给它,它会切掉最后两个字符。熟悉Unix/Linux命令的人可能会推荐一些您可以从QSH或PASE中使用的东西。那只不过是一艘班轮而已。确保
sed
可用。更方便的是
truncate
命令,但我不认为ibmi附带该命令。另外,如果您熟悉Perl、Python或Node.js,您可以非常轻松地安装其中一个并使用它(如果安装了
yum
,那么您已经有了Perl和Python 2;Node.js和Python 3是一个附加但非常简单的步骤)。@JohnY是的,我已经尝试过sed。使用sed,我可以删除*CR,但sed在末尾添加*LF。我又回到原点了。sed'$s/\r\n/'SAMP1.txt>RESULT1.txt