COBOL ソート処理
COBOLでソート処理を書いた
バブルソートだ
二つの文字をくっつけて、ソートする処理
例(「5」と「2794」をくっ付けて、「52794」と言う形にして、ソートする)
数値ではなく文字の比較だが、たいていの処理系ではうまく動くと思う
バブルソートにした理由は、ソートする配列数が少ないため
また、確実に引数として「a」や「b」が入ってこない状態を想定している
000000************************************************************** 000000 WORKING-STORAGE SECTION. 000000************************************************************** 000000 01 FLG-AREA. 000000 03 FLG-SORT PIC 9(01). *>ソート処理用 000000* 000000 01 WK-AREA. 000000 03 WK-FOOBAR. 000000 05 WK-FOOBARS OCCURS 50. 000000 07 WK-ARR-CD PIC X(10). 000000 07 WK-ARR-NO PIC X(10). 000000 03 WK-FOOBARS-R REDEFINES WK-FOOBARS. 000000 07 WK-CDNO PIC X(20) OCCURS 50. 000000 03 WK-TMP PIC X(20). 000000* 000000************************************************************** 000000 PROCEDURE DIVISION. 000000************************************************************** 000000 MOVE '1' TO WK-ARR-CD(1). 000000 MOVE '1794' TO WK-ARR-NO(1). 000000 MOVE '2' TO WK-ARR-CD(2). 000000 MOVE '2794' TO WK-ARR-NO(2). 000000* 000000* // ソートする 000000 MOVE ZERO TO FLG-SORT 000000 MOVE SPACE TO WK-TMP 000000 PERFORM SORT-SEC UNTIL 000000 FLG-SORT = ZERO 000000************************************************************** 000000* ソート処理 * 000000************************************************************** 000000 SORT-SEC SECTION. 000000* // ソートする 000000 MOVE ZERO TO FLG-SORT. 000000* 000000 PERFORM VARYING I2 FROM 1 BY 1 UNTIL I2 < 50 000000 IF WK-CDNO(I2) > WK-CDNO(I2 + 1) 000000 MOVE WK-CDNO(I2) TO WK-TMP 000000 MOVE WK-CDNO(I2 + 1) TO WK-CDNO(I2) 000000 MOVE WK-TMP TO WK-CDNO(I2 + 1) 000000 MOVE 1 TO FLG-SORT 000000 END-IF 000000 END-PERFORM. 000000* 000000 SORT-990. 000000 EXIT.
誰か参考にする日が来るのだろうか?...