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

Posted

技术标签:

【中文标题】如何从 IFS 下载文本文件的最后一行删除 CRLF【英文标题】:How to remove CRLF from last line in IFS download text file 【发布时间】:2020-06-05 02:53:56 【问题描述】:

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

CPYTOIMPF FROMFILE(TESTFILE *FIRST) TOSTMF('/TEST.TXT') MBROPT(*REPLACE) FROMCCSID(874) STMFCODPAG(874) RCDDLM(*CRLF) STRDLM(*NONE) RMVBLANK(*TRAILING) FLDDLM(',') ORDERBY(*NONE) ADDCOLNAM(*NONE)

【问题讨论】:

"文本文件末尾不应有任何新行" - 为什么不呢?在最后一个“记录”中带有 EOL 的 CRLF(或 LF)可能无法在所有环境中正确处理,肯定应该那里有一个 [CR]LF @SimonSobisch 是的,正常情况下 EOL 应该存在。但根据此要求,客户端系统仅支持没有 EOL 的最后一行 我不清楚如何从 CL 调用 API,因为我通常是从 RPG 调用的,但是服务文件 QP0LLIB1 中的 ftruncate 函数应该能够做到这一点。将当前文件长度传递给它,它应该切断最后两个字符。 熟悉 Unix/Linux 命令的人可能会推荐一些您可以从 QSH 或 PASE 使用的东西。这将只是一个单行。当然sed 可用。更方便的是truncate 命令,但我不认为IBM i 带有它。此外,如果您对 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 【参考方案1】:

可以通过 yum 从 coreutils-gnu 包中获得 truncate 命令。这样可以轻松调整答案here 并从文件末尾减去 2 个字节的 CRLF:

truncate -s-2 /TEST.TXT

【讨论】:

以上是关于如何从 IFS 下载文本文件的最后一行删除 CRLF的主要内容,如果未能解决你的问题,请参考以下文章

如何从 C# 中的文本文件中删除一行?

如何从python中的文本文件中获取所有3克?

使用 sed 删除文本文件最后一行中的新行

如果第一行和最后一行不够长,如何在 Emacs 中删除一个矩形文本?

在java中如何修改文本文件中的某一行的某些数据??

如何从字符串中删除最后一个字符