Picture Hasil Edit

Simbol edit Z, koma, titik, tanda, dan perlindungan cek untuk tampilan nilai yang terbaca manusia.

Daftar isi

Nilai numerik yang tersimpan di dalam field selalu tampil mentah, misalnya 0001234.5 dengan nol pengisi, padahal laporan ditujukan kepada manusia yang terbiasa membaca 1.234,50. Topik ini membahas picture hasil edit, yaitu picture yang dirancang untuk tampilan, beserta simbol supresi nol, pemisah, tanda, dan perlindungan cek yang tersedia di dalamnya.

Picture data dan picture edit#

Picture yang hanya memuat X, A, dan 9 disebut picture data karena fieldnya menyimpan nilai, sedangkan picture yang memuat simbol seperti Z, koma, dan tanda disebut picture edit karena fieldnya hanya digunakan untuk menampilkan nilai. Field hasil edit menempati memori sesuai jumlah simbolnya, tetapi kategorinya bukan numeric, sehingga field tersebut tidak sah untuk aritmetika. Pola kerjanya selalu dua langkah, yaitu nilai disimpan pada field PIC 9 atau PIC S9, kemudian dipindahkan dengan MOVE ke field hasil edit saat akan ditampilkan.

cobol Contoh: field hasil edit bukan operand aritmetika
      * tidak-dijalankan
       01 TOTAL-EDIT  PIC ZZZ9.99.
       PROCEDURE DIVISION.
           ADD 1 TO TOTAL-EDIT

Compiler menolak pernyataan ADD 1 TO TOTAL-EDIT di atas dengan pesan error error: 'TOTAL-EDIT' is not a numeric name, sehingga kesalahan semacam ini tertangkap saat kompilasi, sebelum program berjalan. Pemindahan nilai terlalu besar ke field hasil edit berlaku seperti MOVE biasa, yaitu digit kiri terpotong tanpa pesan, sehingga lebar field edit juga harus dihitung dari nilai maksimum yang mungkin.

Lebar field hasil edit dihitung dari jumlah simbolnya sebagaimana field data. Simbol yang memakan lebih dari satu karakter dihitung sesuai panjangnya, sehingga akhiran CR menambah dua posisi dan setiap koma menambah satu posisi. Kebiasaan yang baik adalah menurunkan picture edit langsung dari picture data yang menyimpan nilainya, lalu menambahkan simbol pemisah dan tanda pada ukuran yang masih menampung nilai maksimum.

Supresi nol dengan koma dan titik#

Simbol Z menekan nol di depan menjadi spasi, simbol koma menyisipkan pemisah ribuan, dan simbol titik menampilkan tanda desimal pada posisi V. Gabungan ketiganya mengubah 001234.50 menjadi 1.234,50 atau 1,234.50 tergantung pada gaya yang dipilih. Program berikut memformat nilai 1234.50 dan -1234.50 dengan beberapa picture hasil edit yang lazim digunakan untuk nilai uang.

cobol format-uang.cbl
       IDENTIFICATION DIVISION.
       PROGRAM-ID. FORMAT-UANG.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 NILAI-POS    PIC S9(6)V99 VALUE 1234.5.
       01 NILAI-NEG    PIC S9(6)V99 VALUE -1234.5.
       01 T-BIASA      PIC ZZZZZ9.99.
       01 T-KOMA       PIC ZZZ,ZZ9.99.
       01 T-PLUS       PIC +ZZZ,ZZ9.99.
       01 T-MIN        PIC -ZZZ,ZZ9.99.
       01 T-MIN-POS    PIC -ZZZ,ZZ9.99.
       01 T-CR         PIC ZZZ,ZZ9.99CR.
       01 T-DB         PIC ZZZ,ZZ9.99DB.
       PROCEDURE DIVISION.
           MOVE NILAI-POS TO T-BIASA
           MOVE NILAI-POS TO T-KOMA
           MOVE NILAI-POS TO T-PLUS
           MOVE NILAI-NEG TO T-MIN
           MOVE NILAI-POS TO T-MIN-POS
           MOVE NILAI-NEG TO T-CR
           MOVE NILAI-NEG TO T-DB
           DISPLAY "Z saja             : [" T-BIASA "]"
           DISPLAY "Koma ribu + titik  : [" T-KOMA "]"
           DISPLAY "Tanda +            : [" T-PLUS "]"
           DISPLAY "Tanda -, nilai neg : [" T-MIN "]"
           DISPLAY "Tanda -, nilai pos : [" T-MIN-POS "]"
           DISPLAY "Akhiran CR         : [" T-CR "]"
           DISPLAY "Akhiran DB         : [" T-DB "]"
           STOP RUN.
text Keluaran
Z saja             : [  1234.50]
Koma ribu + titik  : [  1,234.50]
Tanda +            : [+  1,234.50]
Tanda -, nilai neg : [-  1,234.50]
Tanda -, nilai pos : [   1,234.50]
Akhiran CR         : [  1,234.50CR]
Akhiran DB         : [  1,234.50DB]

Baris pertama menunjukkan bahwa ZZZZZ9.99 hanya menekan nol di depan, sehingga 1234.50 tampil dengan dua spasi pengisi tanpa koma. Baris kedua menambahkan koma ribuan sehingga terbaca 1,234.50. Simbol plus selalu menampilkan tanda, baik plus maupun minus, sedangkan simbol minus hanya menampilkan minus untuk nilai negatif dan spasi untuk nilai positif, sebagaimana ditunjukkan dua baris bertanda minus. Akhiran CR dan DB tampil pada nilai negatif dan menjadi dua spasi ketika nilai positif.

Reproduksi keluaran di atas dengan perintah berikut, lalu jalankan ./format-uang.

bash
# kompilasi program menjadi eksekutabel
cobc -x format-uang.cbl

Tanda, akhiran CR dan DB, serta simbol penyisip lainnya#

Selain simbol yang sudah dicoba, picture edit menyediakan simbol penyisip (insertion) untuk kebutuhan tampilan tertentu. Simbol B menyisipkan spasi, simbol 0 menyisipkan nol sungguhan, dan simbol garis miring menyisipkan / pada posisinya. Simbol bintang menyediakan check protection, yaitu perlindungan cek, dengan mengganti nol depan menjadi bintang agar angka pada cek tidak mudah dipalsukan. Persen tidak memiliki simbol sendiri dan cukup ditampilkan sebagai literal terpisah pada DISPLAY.

SimbolFungsi
Zmenekan nol depan menjadi spasi
,menyisipkan koma pemisah ribuan
.menampilkan titik desimal pada posisi V
+menampilkan plus untuk positif dan minus untuk negatif
-menampilkan minus untuk negatif dan spasi untuk positif
CR, DBakhiran dua karakter untuk nilai negatif
*mengisi posisi kosong dengan bintang sebagai perlindungan cek
Bmenyisipkan spasi
0menyisipkan nol sungguhan
/menyisipkan garis miring

Program berikut mencoba simbol-simbol tersebut dalam satu program utuh.

cobol format-lain.cbl
       IDENTIFICATION DIVISION.
       PROGRAM-ID. FORMAT-LAIN.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 ANGKA-KECIL   PIC 9(3) VALUE 7.
       01 ANGKA-BESAR   PIC 9(6) VALUE 123456.
       01 TANGGAL-ANGKA PIC 9(6) VALUE 260315.
       01 BULAN         PIC 99 VALUE 3.
       01 T-BINTANG     PIC ****9.99.
       01 T-SPASI       PIC 999B999.
       01 T-GARIS       PIC 99/99/99.
       01 T-NOL         PIC ZZZ9.00.
       01 T-BULAN       PIC 09.
       01 T-PERSEN      PIC ZZ9.
       01 NILAI-STS     PIC S9(4) SIGN TRAILING SEPARATE VALUE -42.
       PROCEDURE DIVISION.
           MOVE 12.5 TO T-BINTANG
           MOVE ANGKA-BESAR TO T-SPASI
           MOVE TANGGAL-ANGKA TO T-GARIS
           MOVE ANGKA-KECIL TO T-NOL
           MOVE BULAN TO T-BULAN
           MOVE 87 TO T-PERSEN
           DISPLAY "Cek proteksi *  : [" T-BINTANG "]"
           DISPLAY "Penyisip B      : [" T-SPASI "]"
           DISPLAY "Penyisip /      : [" T-GARIS "]"
           DISPLAY "Penyisip .00    : [" T-NOL "]"
           DISPLAY "Penyisip 0      : [" T-BULAN "]"
           DISPLAY "Persen          : [" T-PERSEN "%]"
           DISPLAY "Tanda pisah     : [" NILAI-STS "]"
           STOP RUN.
text Keluaran
Cek proteksi *  : [***12.50]
Penyisip B      : [123 456]
Penyisip /      : [26/03/15]
Penyisip .00    : [   7.00]
Penyisip 0      : [03]
Persen          : [ 87%]
Tanda pisah     : [0042-]

Setiap baris mengonfirmasi satu simbol. Nilai 12.5 pada PIC ****9.99 tampil ***12.50 karena tiga posisi kiri yang kosong diisi bintang, bukan spasi. Penyisip B membentuk 123 456, penyisip garis miring membentuk tampilan tanggal 26/03/15, dan simbol 0 pada PIC 09 melengkapi bulan 3 menjadi 03. Baris terakhir memperlihatkan klausa sign trailing separate pada field data, yaitu tanda yang disimpan sebagai karakter terpisah di ujung sehingga -42 tampil 0042- dan fieldnya menempati lima byte, bukan empat.

Reproduksi keluaran di atas dengan perintah berikut, lalu jalankan ./format-lain.

bash
# kompilasi program menjadi eksekutabel
cobc -x format-lain.cbl

Kesalahan umum#

  • Melakukan aritmetika langsung pada field hasil edit. Pernyataan seperti ADD 1 TO TOTAL-EDIT ditolak compiler dengan pesan error: 'TOTAL-EDIT' is not a numeric name. Simpan nilai pada field numeric, lalu pindahkan ke field hasil edit hanya saat menampilkan.
  • Lupa bahwa akhiran CR dan DB menambah dua posisi. Field PIC ZZZ,ZZ9.99CR menempati 12 posisi meskipun bagian angkanya hanya 10, sehingga perhitungan lebar baris laporan meleset bila akhirannya tidak dihitung.
  • Menghitung lebar field edit tanpa memperhitungkan tanda. Simbol plus dan minus masing-masing menambah satu posisi di depan, sehingga nilai maksimum harus muat pada sisa posisinya atau digit kiri terpotong tanpa peringatan.

Ringkasan#

  • Field hasil edit hanya untuk tampilan dan tidak dapat menjadi operand aritmetika, sedangkan nilai tetap disimpan pada field PIC 9 atau PIC S9.
  • Simbol Z menekan nol depan menjadi spasi, koma dan titik menyisipkan pemisah, serta bintang memberi perlindungan cek dengan pengisi bintang.
  • Simbol plus selalu menampilkan tanda, simbol minus hanya untuk nilai negatif, dan akhiran CR atau DB menandai nilai negatif dengan dua karakter.
  • Simbol penyisip B, 0, dan garis miring membentuk tampilan spasi, nol tetap, dan tanggal sesuai posisinya di dalam picture.

Referensi#