INSPECT memeriksa isi sebuah field karakter dan melakukan tiga macam pengolahan tanpa field penampung baru, yaitu menghitung kemunculan dengan TALLYING, mengganti isi dengan REPLACING, dan memetakan sekumpulan karakter ke sekumpulan lain dengan CONVERTING. Topik ini membahas ketiga bentuk tersebut, sifat penghitung yang selalu menambah, serta gabungan TALLYING dan REPLACING dalam satu pernyataan. Semua contoh bekerja pada field teks biasa, sehingga setiap hasil dapat diperiksa langsung dari keluaran program.
Menghitung kemunculan dengan TALLYING#
Frasa TALLYING menghitung berapa kali sebuah karakter atau pola karakter muncul di dalam field, lalu menambahkan hasilnya ke penghitung numerik. Satu pernyataan INSPECT boleh memuat beberapa penghitung sekaligus, dan setiap penghitungan dapat diberi kualifikasi ALL, LEADING, atau TRAILING serta batasan BEFORE atau AFTER. Kata CHARACTERS tanpa pola apa pun menghitung seluruh karakter yang dilewati, sehingga hasilnya sama dengan panjang field bila tidak disertai batasan. Program berikut menghitung huruf i dan huruf a pada satu kalimat dalam satu pernyataan, kemudian menunjukkan akibat penghitung yang tidak dinolkan.
IDENTIFICATION DIVISION.
PROGRAM-ID. HITUNG-KARAKTER.
*--------------------------------------------------------------
* INSPECT TALLYING: penghitung menambah, bukan mengganti.
*--------------------------------------------------------------
DATA DIVISION.
WORKING-STORAGE SECTION.
01 KALIMAT PIC X(17) VALUE "nilai ujian siswa".
01 JML-HURUF-I PIC 9(2) VALUE 0.
01 JML-HURUF-A PIC 9(2) VALUE 0.
PROCEDURE DIVISION.
UTAMA.
INSPECT KALIMAT TALLYING JML-HURUF-I FOR ALL "i"
JML-HURUF-A FOR ALL "a"
DISPLAY "Tanpa batas : i=" JML-HURUF-I ", a=" JML-HURUF-A
INSPECT KALIMAT TALLYING JML-HURUF-I FOR ALL "i"
DISPLAY "Tanpa nol : i=" JML-HURUF-I ", a=" JML-HURUF-A
MOVE 0 TO JML-HURUF-I JML-HURUF-A
INSPECT KALIMAT TALLYING JML-HURUF-I FOR ALL "i" AFTER "u"
JML-HURUF-A FOR ALL "a"
DISPLAY "Setelah u : i=" JML-HURUF-I ", a=" JML-HURUF-A
STOP RUN.Tanpa batas : i=04, a=03
Tanpa nol : i=08, a=03
Setelah u : i=02, a=03Kalimat “nilai ujian siswa” memuat huruf i sebanyak empat kali, yaitu dua pada “nilai”, satu pada “ujian”, dan satu pada “siswa”, sedangkan huruf a muncul tiga kali. Baris kedua membuktikan sifat TALLYING, yaitu pernyataan INSPECT kedua menambahkan hitungan baru ke isi lama sehingga angkanya menjadi 08. Baris ketiga diperoleh setelah MOVE 0 mengosongkan kedua penghitung, dan kata AFTER “u” membuat penghitungan huruf i dimulai setelah huruf u pertama, sehingga hanya huruf i pada “ujian” dan “siswa” yang terhitung.
Reproduksi keluaran di atas dengan perintah berikut, lalu jalankan
./hitung-karakter.
# kompilasi program penghitung karakter
cobc -x hitung-karakter.cblMengganti isi dengan REPLACING#
Frasa REPLACING mengganti karakter atau frasa di dalam field secara langsung, dan penggantinya wajib sama panjang dengan frasa yang diganti agar tata letak field tidak berubah. Kualifikasi ALL mengganti seluruh kemunculan, FIRST hanya kemunculan pertama, sedangkan LEADING dan TRAILING mengganti kelompok kemunculan di awal atau di akhir field. Sumber dan penggantinya boleh berupa konstanta figuratif, misalnya mengganti seluruh spasi dengan nol melalui REPLACING ALL SPACES BY ZEROS. Program berikut mengubah satu field kode melalui tiga langkah berurutan, sehingga efek pengubahan di tempat terlihat jelas.
IDENTIFICATION DIVISION.
PROGRAM-ID. GANTI-KARAKTER.
*--------------------------------------------------------------
* INSPECT REPLACING: karakter dan frasa diganti di tempat.
*--------------------------------------------------------------
DATA DIVISION.
WORKING-STORAGE SECTION.
01 KODE PIC X(13) VALUE "2024-aa-11-aa".
PROCEDURE DIVISION.
UTAMA.
DISPLAY "Awal : [" KODE "]"
INSPECT KODE REPLACING ALL "-" BY "/"
DISPLAY "Semua - : [" KODE "]"
INSPECT KODE REPLACING FIRST "aa" BY "bb"
DISPLAY "Pertama : [" KODE "]"
INSPECT KODE REPLACING ALL "aa" BY "cc"
DISPLAY "Sisa : [" KODE "]"
STOP RUN.Awal : [2024-aa-11-aa]
Semua - : [2024/aa/11/aa]
Pertama : [2024/bb/11/aa]
Sisa : [2024/bb/11/cc]Setiap INSPECT mengubah isi KODE di tempat tanpa field perantara, dan hasil satu
langkah menjadi titik awal langkah berikutnya. Pemisah - seluruhnya menjadi
/ pada langkah pertama, langkah kedua mengganti hanya pasangan aa yang
pertama menjadi bb, dan langkah ketiga mengganti sisa pasangan aa menjadi
cc. Karena setiap pengganti sama panjang dengan yang diganti, panjang field tidak
pernah berubah dan posisi setiap karakter mudah dilacak.
Reproduksi keluaran di atas dengan perintah berikut, lalu jalankan
./ganti-karakter.
# kompilasi program pengganti karakter
cobc -x ganti-karakter.cblMengonversi karakter dengan CONVERTING#
Frasa CONVERTING memetakan karakter dari satu set ke karakter pada posisi yang sama di set lain, sehingga cocok untuk pemetaan satu per satu seperti huruf kecil ke huruf besar. Kedua setnya wajib sama panjang, dan setiap karakter field yang cocok dengan satu anggota set asal diganti pasangannya pada set tujuan. Program berikut menggunakan CONVERTING sekaligus menunjukkan gabungan TALLYING dan REPLACING dalam satu pernyataan INSPECT, yaitu dua pengolahan yang dikerjakan dalam satu pemeriksaan field.
IDENTIFICATION DIVISION.
PROGRAM-ID. KONVERSI-GABUNG.
*--------------------------------------------------------------
* INSPECT CONVERTING dan gabungan TALLYING REPLACING.
*--------------------------------------------------------------
DATA DIVISION.
WORKING-STORAGE SECTION.
01 KODE-HURUF PIC X(12) VALUE "statistika a".
01 BARIS-DATA PIC X(12) VALUE "ab 12 ab 345".
01 JML-SPASI PIC 9(2) VALUE 0.
PROCEDURE DIVISION.
UTAMA.
DISPLAY "Awal : [" KODE-HURUF "]"
INSPECT KODE-HURUF CONVERTING
"abcdefghijklmnopqrstuvwxyz"
TO "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
DISPLAY "Besar : [" KODE-HURUF "]"
INSPECT BARIS-DATA TALLYING JML-SPASI FOR ALL SPACES
REPLACING ALL "ab" BY "xy"
DISPLAY "Gabung : [" BARIS-DATA "]"
DISPLAY "Spasi : " JML-SPASI
STOP RUN.Awal : [statistika a]
Besar : [STATISTIKA A]
Gabung : [xy 12 xy 345]
Spasi : 03Kedua set pada INSPECT pertama memuat 26 huruf dengan urutan yang sama,
sehingga seluruh huruf kecil pada “statistika a” menjadi huruf besar.
Pernyataan INSPECT kedua menghitung seluruh spasi pada “ab 12 ab 345” sekaligus
mengganti kedua frasa ab menjadi xy, dan kedua hasil itu tampil pada dua
baris terakhir berupa teks baru beserta hitungan 03. Bentuk gabungan ini
memeriksa field satu kali untuk dua pengolahan, dibandingkan dengan dua
pernyataan terpisah yang memeriksa field dua kali.
Reproduksi keluaran di atas dengan perintah berikut, lalu jalankan
./konversi-gabung.
# kompilasi program konversi dan gabungan TALLYING REPLACING
cobc -x konversi-gabung.cblKesalahan umum#
- Penghitung TALLYING tidak dinolkan sebelum INSPECT. Hitungan lama ikut terbawa sehingga hasilnya berlipat, sebagaimana baris kedua program pertama. Kosongkan penghitung dengan MOVE 0 lebih dahulu.
- Frasa pengganti pada REPLACING tidak sama panjang dengan frasa yang diganti,
misalnya mengganti
-dengan--. Kompilasi ditolak karena panjang field harus tetap. Samakan panjang kedua frasa. - Set pada CONVERTING berbeda panjang. Pemetaan satu per satu menuntut kedua set berjumlah karakter yang sama, dan ketidaksesuaian ditolak saat kompilasi.
- Mengira REPLACING dan CONVERTING menghasilkan field baru. Keduanya mengubah field sumber di tempat, sehingga salin isi field ke field lain terlebih dahulu bila isi awal masih diperlukan.
Ringkasan#
- TALLYING menghitung kemunculan dengan kualifikasi ALL, LEADING, atau TRAILING, seluruh karakter dengan CHARACTERS, serta batas BEFORE dan AFTER, lalu menambah hasilnya ke penghitung yang wajib dinolkan lebih dahulu.
- REPLACING mengganti karakter atau frasa di tempat dengan kualifikasi ALL, FIRST, LEADING, dan TRAILING, dan penggantinya wajib sama panjang dengan frasa yang diganti.
- CONVERTING memetakan dua set karakter sama panjang secara satu per satu, misalnya huruf kecil ke huruf besar.
- Satu pernyataan INSPECT boleh menggabungkan TALLYING dan REPLACING sehingga field diperiksa satu kali untuk dua pengolahan.
Referensi#
- GnuCOBOL Manual — Free Software Foundation — Memuat bentuk pernyataan INSPECT dengan frasa TALLYING, REPLACING, dan CONVERTING beserta aturan panjang set dan penghitungnya.
- IBM Enterprise COBOL for z/OS documentation — IBM — Halaman INSPECT statement menjelaskan kualifikasi ALL, LEADING, TRAILING, FIRST, serta batas BEFORE dan AFTER pada kompiler mainframe.