COBOL - Veri Düzeni

COBOL düzeni, her alanın kullanımının ve içinde bulunan değerlerin açıklamasıdır. COBOL'de kullanılan veri açıklama girişleri aşağıdadır -

  • Maddeyi Yeniden Tanımlıyor
  • Clause'yi yeniden adlandırır
  • Kullanım Maddesi
  • Copybooks

Maddeyi Yeniden Tanımlıyor

Yeniden tanımlar yan tümcesi, farklı veri açıklamasına sahip bir depolamayı tanımlamak için kullanılır. Bir veya daha fazla veri öğesi aynı anda kullanılmazsa, aynı depolama başka bir veri öğesi için kullanılabilir. Dolayısıyla aynı depolama, farklı veri öğeleriyle belirtilebilir.

Sözdizimi

Redefines cümlesinin sözdizimi aşağıdadır -

01 WS-OLD PIC X(10).
01 WS-NEW1 REDEFINES WS-OLD PIC 9(8).
01 WS-NEW2 REDEFINES WS-OLD PIC A(10).

Aşağıda kullanılan parametrelerin ayrıntıları verilmiştir -

  • WS-ESKİ Öğe Yeniden Tanımlandı
  • WS-NEW1 ve WS-NEW2 Öğeyi Yeniden Tanımlıyor

Yeniden tanımlanan ve yeniden tanımlayan öğenin seviye numaraları aynı olmalı ve 66 veya 88 seviye numarası olamaz. Yeniden tanımlayan bir öğe ile VALUE yan tümcesi kullanmayın. Dosya Bölümünde, 01 seviye numaralı bir yeniden tanımlayan madde kullanmayın. Tanımı yeniden tanımlar, yeniden tanımlamak istediğiniz bir sonraki veri açıklaması olmalıdır. Yeniden tanımlayan bir öğe her zaman yeniden tanımlanmış bir öğeyle aynı değere sahip olacaktır.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-DESCRIPTION.
   05 WS-DATE1 VALUE '20140831'.
   10 WS-YEAR PIC X(4).
   10 WS-MONTH PIC X(2).
   10 WS-DATE PIC X(2).
   05 WS-DATE2 REDEFINES WS-DATE1 PIC 9(8).

PROCEDURE DIVISION.
   DISPLAY "WS-DATE1 : "WS-DATE1.
   DISPLAY "WS-DATE2 : "WS-DATE2.

STOP RUN.

JCL yukarıdaki COBOL programını yürütmek için -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Yukarıdaki programı derleyip çalıştırdığınızda aşağıdaki sonucu verir -

WS-DATE1 : 20140831
WS-DATE2 : 20140831

Clause'yi yeniden adlandırır

Renames cümlesi, mevcut veri öğelerine farklı adlar vermek için kullanılır. Veri adlarını yeniden gruplandırmak ve bunlara yeni bir ad vermek için kullanılır. Yeni veri adları, gruplar veya temel öğeler arasında yeniden adlandırılabilir. Seviye numarası 66, yeniden adlandırma için ayrılmıştır.

Syntax

Renames yan tümcesi için sözdizimi aşağıdadır -

01 WS-OLD.
10 WS-A PIC 9(12).
10 WS-B PIC X(20).
10 WS-C PIC A(25).
10 WS-D PIC X(12).
66 WS-NEW RENAMES WS-A THRU WS-C.

Yeniden adlandırma yalnızca aynı düzeyde mümkündür. Yukarıdaki örnekte, WS-A, WS-B ve WS-C aynı seviyededir. Yeniden adlandırma tanımı, yeniden adlandırmak istediğiniz sonraki veri açıklaması olmalıdır. Seviye numaraları 01 veya 77 ile Yeniden Adları kullanmayın. Yeniden adlandırma için kullanılan veri adları sırayla gelmelidir. Oluş yan tümcesine sahip veri öğeleri yeniden adlandırılamaz.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-DESCRIPTION.
   05 WS-NUM.
   10 WS-NUM1 PIC 9(2) VALUE 20.
   10 WS-NUM2 PIC 9(2) VALUE 56.
   05 WS-CHAR.
   10 WS-CHAR1 PIC X(2) VALUE 'AA'.
   10 WS-CHAR2 PIC X(2) VALUE 'BB'.
   66 WS-RENAME RENAMES WS-NUM2 THRU WS-CHAR2.

PROCEDURE DIVISION.
   DISPLAY "WS-RENAME : " WS-RENAME.
   
STOP RUN.

JCL yukarıdaki COBOL programını yürütmek için -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Yukarıdaki programı derleyip çalıştırdığınızda, aşağıdaki sonucu verir -

WS-RENAME : 56AABB

Kullanım Maddesi

Kullanım cümlesi, format verilerinin depolandığı işletim sistemini belirtir. Seviye 66 veya 88 ile kullanılamaz. Bir grupta kullanım cümlesi belirtilmişse, tüm temel öğeler aynı kullanım maddesine sahip olacaktır. Kullanım maddesinde bulunan farklı seçenekler aşağıdaki gibidir -

Görüntüle

Veri öğesi ASCII formatında saklanır ve her karakter 1 bayt alır. Varsayılan kullanımdır.

Aşağıdaki örnek, gerekli bayt sayısını hesaplar -

01 WS-NUM PIC S9(5)V9(3) USAGE IS DISPLAY.
It requires 8 bytes as sign and decimal doesn't require any byte.

01 WS-NUM PIC 9(5) USAGE IS DISPLAY.
It requires 5 bytes as sign.

HESAPLAMALI / BİLGİSAYAR

Veri öğesi ikili biçimde saklanır. Burada veri öğeleri tam sayı olmalıdır.

Aşağıdaki örnek, gerekli bayt sayısını hesaplar -

01 WS-NUM PIC S9(n) USAGE IS COMP.

If 'n' = 1 to 4, it takes 2 bytes.
If 'n' = 5 to 9, it takes 4 bytes.
If 'n' = 10 to 18, it takes 8 bytes.

COMP-1

Veri öğesi, Gerçek veya Kayan'a benzer ve tek bir hassas kayan noktalı sayı olarak temsil edilir. Veriler dahili olarak onaltılık formatta saklanır. COMP-1, PIC maddesini kabul etmez. Burada 1 kelime 4 bayta eşittir.

COMP-2

Veri öğesi Uzun veya Çift'e benzer ve çift duyarlıklı kayan noktalı sayı olarak temsil edilir. Veriler dahili olarak onaltılık formatta saklanır. COMP-2, PIC cümlesini belirtmez. Burada 2 kelime 8 bayta eşittir.

COMP-3

Veri öğesi, paketlenmiş ondalık formatta saklanır. Her rakam yarım bayt (1 yarım bayt) kaplar ve işaret en sağdaki yarım baytta saklanır.

Aşağıdaki örnek, gerekli bayt sayısını hesaplar -

01 WS-NUM PIC 9(n) USAGE IS COMP.
Number of bytes = n/2 (If n is even)
Number of bytes = n/2 + 1(If n is odd, consider only integer part)

01 WS-NUM PIC 9(4) USAGE IS COMP-3 VALUE 21.
It requires 2 bytes of storage as each digit occupies half a byte.

01 WS-NUM PIC 9(5) USAGE IS COMP-3 VALUE 21.
It requires 3 bytes of storage as each digit occupies half a byte.

Defterler

COBOL kopyası, veri yapılarını tanımlayan bir kod seçimidir. Birçok programda belirli bir veri yapısı kullanılıyorsa, aynı veri yapısını tekrar yazmak yerine kopya defterlerini kullanabiliriz. COPY deyimini bir programa bir kopyasını eklemek için kullanıyoruz. COPY ifadesi, WorkingStorage Bölümünde kullanılır.

Aşağıdaki örnek, bir COBOL programının içindeki bir kopyasını içerir -

DATA DIVISION.
WORKING-STORAGE SECTION.
COPY ABC.

Burada ABC, kopya kitabının adıdır. ABC kopyasında bulunan aşağıdaki veri öğeleri bir program içinde kullanılabilir.

01 WS-DESCRIPTION.
   05 WS-NUM.
      10 WS-NUM1 PIC 9(2) VALUE 20.
      10 WS-NUM2 PIC 9(2) VALUE 56.
   05 WS-CHAR.
      10 WS-CHAR1 PIC X(2) VALUE 'AA'.
      10 WS-CHAR2 PIC X(2) VALUE 'BB'.