Это простая задача с использованием OUTFIL и его функций отчетности:
//TOTALREP EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTOUT DD SYSOUT=*
//SYSIN DD *
OPTION COPY
OUTFIL REMOVECC,
TRAILER1=(TOTAL=(1,13,SFF,
EDIT=(SIIIIIIIIT.TT),
SIGNS=(+,-),
LENGTH=13))
//SORTIN DD *
-000000042.99
-000000001.50
-000000003.00
-000000001.50
-000000042.99
+000000025.00
+000000019.52
+000000058.36
СОРТАУТ содержит:
-000000042.99
-000000001.50
-000000003.00
-000000001.50
-000000042.99
+000000025.00
+000000019.52
+000000058.36
+3.86
REMOVECC говорит, что не нужно включать управляющий код принтера, TRAILER1 действует в конце группы OUTFIL, TOTAL (или TOT) говорит, что дает общую позицию (здесь 1), длину (13) и тип (FS) (который вы следует искать в Руководстве по программированию приложений DFSORT, которое для вашей версии DFSORT можно найти здесь: http://www-01.ibm.com/support/docview.wss?uid=isg3T7000080 . EDIT, SIGNS и LENGTH определяют, как будет отображаться ОБЩЕЕ значение.
UFF - это свободный формат без знака. Он удалит все нечисловые цифры и обработает результат.
SFF является подписанным свободным форматом. Это удалит все нечисловые цифры и обработает результат на основе присутствия в любом месте поля, а это означает, что где угодно, одного или нескольких -
Если -
находится, значение будет отрицательным, в противном случае положительным.
FS CSF Эти два слова являются синонимами и могут обрабатывать ведущие знаки, но не десятичные точки. В исходном примере наличие десятичной точки приводило к тому, что число рассматривалось только как десятичная часть. Все перед запятой игнорировалось, включая знак.
person
Bill Woodger
schedule
08.10.2014