如何从 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的主要内容,如果未能解决你的问题,请参考以下文章