Как удалить CRLF из последней строки в текстовом файле загрузки IFS

Я загружаю текстовый файл, используя 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) ДОБАВИТЬСОЛНАМ(*NONE)


person Nat Taggart    schedule 05.06.2020    source источник
comment
в конце текстового файла не должно быть новой строки - почему бы и нет? CRLF (или LF) с EOL в последней записи может не обрабатываться правильно во всех средах, там определенно должен быть [CR]LF   -  person Simon Sobisch    schedule 05.06.2020
comment
@SimonSobisch Да, нормальный сценарий, в котором должен существовать EOL. Но в соответствии с этим требованием клиентская система поддерживает только последнюю строку без EOL.   -  person Nat Taggart    schedule 05.06.2020
comment
Я не понимаю, как вызывать API из CL, так как я обычно делаю это из RPG, но ftruncate в служебном файле QP0LLIB1 должна это делать. Передайте текущую длину файла-2, и он должен отрезать последние два символа.   -  person Mike    schedule 05.06.2020
comment
Кто-то, кто хорошо разбирается в командах Unix/Linux, вероятно, может порекомендовать что-то, что вы можете использовать из QSH или PASE. Это будет просто однострочный. Наверняка sed доступен. Что было бы еще удобнее, так это команда truncate, но я не думаю, что IBM i поставляется с ней. Кроме того, если вы хорошо разбираетесь в Perl, Python или Node.js, вы можете очень легко установить один из них и использовать его (если установлен yum, значит, у вас уже есть Perl и Python 2; Node.js и Python 3 — это дополнительный, но очень простой шаг).   -  person John Y    schedule 05.06.2020
comment
@JohnY Да, я пробовал sed. используя sed, я могу удалить *CR, но sed добавляет *LF в конце. Итак, я вернулся к исходной точке. sed '$s/\r\n/ /' SAMP1.txt › RESULT1.TXT   -  person Nat Taggart    schedule 08.06.2020


Ответы (1)


Команда truncate доступна из пакета coreutils-gnu через yum. Это позволяет легко настроить ответ здесь и вычесть 2 байта для CRLF из конца файла:

truncate -s-2 /TEST.TXT
person Kevin Adler    schedule 20.06.2020