Добавление сумм, присутствующих в символьном формате

У меня есть PS с LRECL = 500 и RECFM = FB, а в позициях с 70 по 82 у меня есть поля суммы ниже в символьном формате.

  -000000042.99
  -000000001.50
  -000000003.00
  -000000001.50
  -000000042.99
  +000000025.00
  +000000019.52
  +000000058.36

Как я могу преобразовать это в Packed Decimal? Мое намерение состоит в том, что мне нужно суммировать поле сумм. Есть идеи?

У нас есть ДФСОРТ. Эти поля количества не представлены в упакованном десятичном или числовом формате. Этот файл поступает из внешней системы, и я хотел бы суммировать все суммы в этом файле через JCL. Я должен знать сумму. По понятным причинам я не хочу экспортировать этот файл в эксель и находить там сумму. Я не хочу суммировать итоги на основе ключа. Я просто хочу суммировать все суммы в этом файле в этом столбце.


person user3885073    schedule 01.10.2014    source источник
comment
Взгляните на утилиту Sort. Взгляните на мэйнфрейм- Tips-and-tricks.blogspot.com.au/2011/12/ это не совсем то, что вам нужно, но это должно дать вам представление о том, с чего начать.   -  person Bruce Martin    schedule 02.10.2014
comment
@BruceMartin эта ссылка немного спамная, а код некачественный. Я не думаю, что OP в любом случае заинтересован в возвращении, поскольку они не появлялись уже семь часов после запроса.   -  person Bill Woodger    schedule 04.10.2014
comment
Опять же, вы должны принять ответ, который был наиболее полезным для вас, если вы найдете решение. Держит нас счастливыми и готовыми рассмотреть следующий :-)   -  person Bill Woodger    schedule 22.10.2014
comment
Также обратите внимание, что теперь у вас достаточно репутации, чтобы голосовать за вопросы и ответы. Ответы не обязательно должны быть на ваши вопросы, если вы видите что-то полезное для вас или что вам просто нравится, вы можете проголосовать.   -  person Bill Woodger    schedule 22.10.2014


Ответы (2)


Это простая задача с использованием 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
comment
Уважаемый Билл Вуджер, Спасибо за ваше время, ваш ответ решил мою проблему. Ценю твою помощь. - person user3885073; 20.10.2014
comment
Билл, можешь попробовать добавить такие значения, как +90,20 и 20,10? Мой вывод выглядит следующим образом. - person user3885073; 20.10.2014
comment
Обновите свой вопрос (используйте ссылку редактирования под вопросом), указав свои входные данные, контрольные карточки СОРТИРОВКИ, которые вы используете, и результат, который вы получаете. - person Bill Woodger; 20.10.2014
comment
Очень хорошее объяснение UFF, FS и CSF. Спасибо, хорошее обучение для меня. - person user3885073; 21.10.2014
comment
Я отправил еще один вопрос на stackoverflow.com/questions/26495215/date- формат-в-трейлере. - person user3885073; 22.10.2014
comment
Не могли бы вы попробовать ответить и на это? - person user3885073; 22.10.2014

person    schedule
comment
Спасибо, Билл Вуджер. Основываясь на вашем ответе, я пытался несколько раз и просматривал ссылку, которую вы мне предоставили, и теперь я получаю желаемый результат. - person user3885073; 20.10.2014
comment
ХОРОШО. Понятно. Вы были правы, что SFF был необходим. FS/CSF не любят десятичные точки (SFF и UFF не возражают, поскольку они игнорируют все нечисловые значения). Обновил мой ответ описанием. - person Bill Woodger; 21.10.2014