2001/09/02版
| 当バージョンでは 待ちに待った協力者が現れ ゆうパック版を作成して頂きました。(見事に”ささっと”作成されました) 今回 ゆうパック版を追加するにあたって、データベースの構造を少し変えました(列の追加・表の名称の変更) またテーブル作成SQLファイルの作成、テストデータ作成プログラムと本体プログラムのMakefileを1本化しました。 協力してくださった「みねの」さん ご苦労様でした。 開発環境 Vine Linux 2.1 Tinycobol-0.54 |
|
![]() |
GUIの部分は以前と変わり無しです。 またまたVine Linux2.1に戻りました。 実行はPostgreSQLのユーザでXにログインし実行させます。 postmasterを起動させれば あとは今まで通り./unchin.tclで実行可能です。 |
![]() |
データベース名 unchin テーブル名 takuhai 列名 種類がsyu でinteger サイズがsize でinteger 発地がhat でinteger 着地がchk でinteger 運賃がuncn でinteger 以下 作成方法を簡単に説明します。 1.unchinデータベース作成 $createdb unchin 2.takuhaiテーブル作成 $psql unchin < create.sql (注 以下で説明) |
|
![]() |
テストデータ作成方法は クロネコヤマト用のtest01とゆうパック用のtest02を実行させます。 ゆうパックの場合、地域によるunchinの組み合わせが47×47通りありますのでデータ作成プログラムは少し複雑になりました。 bbb02.txtというファイルで「送り元の県」から「送り先の県」の地帯(第1〜第4地帯まであります)をマトリックスで作成しました。そのファイルをインプットとしてtest02.cobで更に重量によるunchin分けを行いデーターベースにinsertしております。 合計22,954件のレコードが出来ました。 実行方法は以下です。 postmasterを起動しpostgreSQLのユーザにてtest01とtest02を実行する。 |
|
以下にソースを紹介いたします。 |
||
yupack.cobです。(みねのさん作成) IDENTIFICATION DIVISION. PROGRAM-ID. YUPACK. ENVIRONMENT DIVISION. CONFIGURATION SECTION. INPUT-OUTPUT SECTION. DATA DIVISION. FILE SECTION. WORKING-STORAGE SECTION. 01 WK-OUT PIC X(20). 01 CMDLINE-PARMS PIC X(64). 01 WK-PRONAME PIC X(10) VALUE '$$$$$$$$$$'. 01 WK-ACC01 PIC X(15) VALUE '$$$$$$$$$$$$$$$'. 01 WK-ACC02 PIC X(15) VALUE '$$$$$$$$$$$$$$$'. 01 WK-ACC03 PIC X(15) VALUE '$$$$$$$$$$$$$$$'. 01 WK-ACC04 PIC X(15) VALUE '$$$$$$$$$$$$$$$'. 01 WK-ACC05 PIC X(02) VALUE '$$'. 01 WK-ACC06 PIC X(02) VALUE '$$'. 01 A PIC X(15). 01 C PIC S9(12)V9(3). 01 JSW PIC 9. 01 WK-KWKKA. 03 WK-TATE PIC S9(06)V9(3). 03 WK-YOKO PIC S9(06)V9(3). 03 WK-TAKA PIC S9(06)V9(3). 03 WK-OMOS PIC S9(06)V9(3). 01 WK-SIZE PIC 9(03). 01 WK-3HEN PIC S9(06)V9(3). 01 WK-DKIN PIC ZZ,ZZZ,ZZ9. 01 WK-OUT PIC X(10). 01 WK-INDEXH PIC 9(3). 01 WK-INDEXC PIC 9(3). 77 DATABASE-NAME PIC X(80). 77 SQL-QUERY PIC X(200). 77 DB-HANDLE PIC 9(12) COMP. 77 QRY-HANDLE PIC 9(12) COMP. 77 NTUPLE PIC 9(12) COMP. 77 NFIELD PIC 9(12) COMP. 77 MAX-TUPLE PIC 9(12) COMP. 77 MAX-FIELD PIC 9(12) COMP. 77 COLUMN-VALUE PIC X(80) VALUE SPACES. 77 CMD PIC 9. 77 DB-STATUS PIC 9(12) COMP. 77 DB-MESSAGE Pic X(200). 01 MYTBL-RECORD PIC X(15). * PROCEDURE DIVISION. A-000. ACCEPT CMDLINE-PARMS FROM COMMAND-LINE. UNSTRING CMDLINE-PARMS DELIMITED BY ' ' INTO WK-PRONAME WK-ACC01 WK-ACC02 WK-ACC03 WK-ACC04 WK-ACC05 WK-ACC06. ** 縦 ** MOVE WK-ACC01 TO A. MOVE ZERO TO C. CALL "SUBX" USING A C JSW. MOVE C TO WK-TATE. ** 横 ** MOVE WK-ACC02 TO A. MOVE ZERO TO C. CALL "SUBX" USING A C JSW. MOVE C TO WK-YOKO. ** 高さ ** MOVE WK-ACC03 TO A. MOVE ZERO TO C. CALL "SUBX" USING A C JSW. MOVE C TO WK-TAKA. ** 重量 ** MOVE WK-ACC04 TO A. MOVE ZERO TO C. CALL "SUBX" USING A C JSW. MOVE C TO WK-OMOS. ** 発地 ** MOVE WK-ACC05 TO WK-INDEXH. ** 着地 ** MOVE WK-ACC06 TO WK-INDEXC. * ** サイズチェック ** COMPUTE WK-3HEN = WK-TATE + WK-YOKO + WK-TAKA. IF WK-TATE > 100 OR WK-YOKO > 100 OR WK-TAKA > 100 OR WK-3HEN > 150 MOVE "サイズ オーバー" TO WK-OUT GO TO A-999. * IF WK-OMOS NOT > 2000 MOVE 2 TO WK-SIZE ELSE IF WK-OMOS NOT > 4000 MOVE 4 TO WK-SIZE ELSE IF WK-OMOS NOT > 6000 MOVE 6 TO WK-SIZE ELSE IF WK-OMOS NOT > 8000 MOVE 8 TO WK-SIZE ELSE IF WK-OMOS NOT > 10000 MOVE 10 TO WK-SIZE ELSE IF WK-OMOS NOT > 12000 MOVE 12 TO WK-SIZE ELSE IF WK-OMOS NOT > 14000 MOVE 14 TO WK-SIZE ELSE IF WK-OMOS NOT > 16000 MOVE 16 TO WK-SIZE ELSE IF WK-OMOS NOT > 18000 MOVE 18 TO WK-SIZE ELSE IF WK-OMOS NOT > 20000 MOVE 20 TO WK-SIZE ELSE MOVE "重量 オーバー" TO WK-OUT GO TO A-999. * *---- FROM INDEX SET ----* COMPUTE WK-INDEXH = WK-INDEXH + 1. * *---- TO INDEX SET ----* COMPUTE WK-INDEXC = WK-INDEXC + 1. * * *---- DB CONNECT ----* MOVE "unchin" TO DATABASE-NAME. CALL "sql_connect_db" USING DATABASE-NAME DB-HANDLE DB-STATUS. IF DB-STATUS NOT = ZEROS DISPLAY "Error in database connection!" STOP RUN. * *---- DB SELECT ----* STRING "select uncn from takuhai where syu = 2 and " " size = " WK-SIZE " and hat = " WK-INDEXH " and chk = " WK-INDEXC " ;;" INTO SQL-QUERY. * CALL "sql_exec_query" USING DB-HANDLE SQL-QUERY QRY-HANDLE DB-STATUS. IF (DB-STATUS NOT = 1 AND DB-STATUS NOT = 2) MOVE SPACES TO DB-MESSAGE CALL "sql_status_message" USING DB-HANDLE DB-MESSAGE DISPLAY DB-MESSAGE. * CALL "sql_max_tuple" USING QRY-HANDLE MAX-TUPLE. CALL "sql_max_field" USING QRY-HANDLE MAX-FIELD. MOVE ZERO TO NTUPLE PERFORM UNTIL NTUPLE = MAX-TUPLE CALL "sql_get_tuple" USING QRY-HANDLE NTUPLE MYTBL-RECORD ADD 1 TO NTUPLE END-PERFORM. * CALL "sql_clear_query" USING QRY-HANDLE. * *---- DB DISCONNECT ----* CALL "sql_disconnect_db" USING DB-HANDLE. * ** 縦 ** MOVE MYTBL-RECORD TO A. MOVE ZERO TO C. CALL "SUBX" USING A C JSW. MOVE C TO WK-DKIN. MOVE WK-DKIN TO WK-OUT. A-999. DISPLAY WK-OUT. EXIT-PROGRAM. |
||
| データ作成用COBOLプログラム test02.cobです。(みねのさん作成) IDENTIFICATION DIVISION. PROGRAM-ID. TEST02. ENVIRONMENT DIVISION. CONFIGURATION SECTION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT INFILE ASSIGN TO "bbb02.txt" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS FS. DATA DIVISION. FILE SECTION. FD INFILE LABEL RECORD IS STANDARD. 01 IN-REC. 03 IN-AREA-DATA. 05 IN-AREA OCCURS 47 INDEXED BY INDX. 07 IN-AREA-NO PIC 9(1). 07 FILLER PIC X(1). WORKING-STORAGE SECTION. 77 FS PIC 9(2). 77 DATABASE-NAME PIC X(80). 77 SQL-QUERY PIC X(200). 77 DB-HANDLE PIC 9(12) COMP. 77 DB-STATUS PIC 9(12) COMP. 77 DB-MESSAGE PIC X(80). 77 QRY-HANDLE PIC 9(12) COMP. 01 I PIC 9(2) VALUE 0. 01 J PIC 9(2). 01 WK-NUM PIC 9(2). 01 WK-TBL. 03 WT-UNCHIN-TBL. 05 WT-1AREA PIC X(40) VALUE "0610077009301010109011701250133014101490". 05 WT-2AREA PIC X(40) VALUE "0710087010301110119012701350143015101590". 05 WT-3AREA PIC X(40) VALUE "0820098011401220130013801460154016201700". 05 WT-4AREA PIC X(40) VALUE "1020118013401420150015801660174018201900". 03 WT-UNCHIN-R REDEFINES WT-UNCHIN-TBL. 05 WT-UNCHIN-G OCCURS 4 INDEXED BY WT-IDX-AREA. 07 WT-UNCHIN PIC 9(4) OCCURS 10 INDEXED BY WT-IDX-G. 01 WK-INSERT. 03 WK-INS01 PIC X(29) VALUE "INSERT INTO takuhai VALUES (". 03 FILLER PIC X(02) VALUE "2,". 03 WK-INS02 PIC 9(03). 03 WK-INS03 PIC X(01) VALUE ",". 03 WK-INS04 PIC 9(02). 03 WK-INS05 PIC X(01) VALUE ",". 03 WK-INS06 PIC 9(02). 03 WK-INS07 PIC X(01) VALUE ",". 03 WK-INS08 PIC 9(04). 03 WK-INS09 PIC X(03) VALUE ");;". PROCEDURE DIVISION. A-000. DISPLAY "table add (yupack) start" OPEN INPUT INFILE. MOVE "unchin" to DATABASE-NAME. CALL "sql_connect_db" USING DATABASE-NAME DB-HANDLE DB-STATUS. IF DB-STATUS NOT = ZEROS DISPLAY "Error in database connection!" STOP RUN. * MOVE WT-UNCHIN-TBL TO WT-UNCHIN-R. A-010. READ INFILE AT END GO TO A-999. IF (FS NOT = "00") DISPLAY "Error on Reading Input File " STOP RUN. * ADD 1 TO I. DISPLAY "i= " I. PERFORM VARYING INDX FROM 1 BY 1 UNTIL INDX > 47 PERFORM VARYING J FROM 1 BY 1 UNTIL J > 10 COMPUTE WK-INS02 = J * 2 MOVE I TO WK-INS04 MOVE INDX TO WK-INS06 MOVE IN-AREA-NO(INDX) TO WK-NUM SET WT-IDX-AREA TO WK-NUM * SET WT-IDX-AREA TO IN-AREA-NO(INDX) SET WT-IDX-G TO J MOVE WT-UNCHIN(WT-IDX-AREA,WT-IDX-G) TO WK-INS08 MOVE WK-INSERT TO SQL-QUERY display sql-query(1:60) CALL "sql_exec_query" using DB-HANDLE SQL-QUERY QRY-HANDLE DB-STATUS * DISPLAY WK-INSERT " " DB-STATUS if (DB-STATUS not = 1 and DB-STATUS not = 2) move spaces to DB-MESSAGE call "sql_status_message" using DB-HANDLE DB-MESSAGE * display DB-MESSAGE end-if END-PERFORM END-PERFORM. * GO TO A-010. A-999. CALL "sql_disconnect_db" USING DB-HANDLE. CLOSE INFILE. DISPLAY "table add (yupack) normal end ". STOP RUN. |
||
テーブル作成用のSQLファイルです。(みねのさん作成) CREATE.SQL drop table takuhai; create table takuhai ( syu integer, size integer, hat integer, chk integer, uncn integer, PRIMARY KEY(syu,size,hat,chk) ); |
Tcl/Tkは今回変わり無しですので省略致します。 |