פרק 11 רישומים נוספים בחטיבת הנתונים ושגרות לבדיקת תקינות.

ג. המשפט REDEFINES

לעיתים דרוש להגדיר שדה יחיד בחטיבת הנתונים, נשני אופנים שונים או יותר. אם אותו אזור צריך לשמש למטרות שונות, אנו חייבים להגדירו בתבנית נוספת (REDEFINE) בחטיבת הנתונים.

כדי לתאר רשומות אלה, נוכל לקבוע שתי תבניות רשומה נפרדות ב-FD , כדלקמן:

FD FILE1 LABEL RECORDS ARE OMITTED,

DATA RECORDS ARE DB-REC, CR-REC.

01 DB-REC.

02 NAME  PIC X(10).

02 ADDRESS-1  PIC X(15).

02 UNIT-PRICE  PIC 9(5).

02 QTY  PIC 9(5).

02 FILLER  PIC X(44).

02 CODE-X  PIC 9.

01 CR-REC.

02 NAME  PIC X(10).

02 ADDRESS-1  PIC X(15).

02 AMT-OF-CREDIT  PIC 999V99.

02 QTY  PIC 9(5).

02 FILLER  PIC X(44).

02 CODE-X  PIC 9.

יצויין, כי שתי הרשומות תופסות את אותו אזור אחסנה (storage area) בן 80 המקומות. הרשומה הראשונה מפרטת את מאפייני השדה; הרשומה השניה מגדירה, בפשטות, מחדש את אותו אזור, תוך שימוש במאפיינים משלה. בחטיבת הביצוע נוכל לבדוק את CODE-X: אם ערכו 1 , נשתמש בתבנית של DB-REC; אם ערכו 0, נשתמש בתבנית של CR-REC. ניתן בCOBOL לפשט את תיאור הרשומה (File Description) הנ''ל, על ידי הגדרת תבנית רשומה אחת בלבד, תוך הגדרה-מחדש של האזור היחידי, המשתנה בהתאם לצופן CODE-X.

FD FILE1 LABEL RECORDS ARE OMITTED,

DATA RECORDS ARE DB-REC, CR-REC.

01 DB-REC.

02 NAME  PIC X(10).

02 ADDRESS-1  PIC X(15).

02 UNIT-PRICE  PIC 9(5).

02 AMT-OF-CREDIT REDEFINES UNIT-PRICE PIC 999V99.

02 QTY  PIC 9(5).

02 FILLER  PIC X(44).

02 CODE-X  PIC 9.

משפט REDEFINES בחטיבת הנתונים מאפשר לכותב התכנית להשתמש במאפיינים שונים בהגדדת שדה אחסנה אחד:

 

שם-נתונים 1

מספר רמה

9(5)

PIC

UNIT-PRICE

02

שם-נתונים 1

שם-נתונים 2

מספר רמה זהה

999V99

PIC

UNIT-PRICE

REDEFINES

AMT-OF-CREDIT

02

בתיאור דלעיל,UNIT-PRICE ו-AMT-OF-CREDIT. מתייחסים שניהם לאותם חמישה מקומות-אחסנה. בחטיבת הביצוע - נבדוק את תוכנו של CODE-X. אם CODE-X = 1, נשתמש ב-UNIT-PRICE כשם לשדה שלם בעל חמישה המקומות. אם 0 = CODE-X, נשתמש ב-AMT-OF-CREDIT. כשם לשדה עם שלושה מקומות לחלק השלם, ושני מקומות לשבר עשרוני.

IF CODE-X = 1 

MULTIPLY  UNIT-PRICE  BY  QTY  GIVING  TOTAL  IN  OUT-REC.

IF  CODE-X = 0 

MOVE  AMT-OF-CREDIT  TO  TOTAL  IN  OUT-REC.

ניתן להשתמש במשפט REDEFINES בכל רמה שבין 02-49. לא ניתן להשתמש בו ברמה 01  בקטע הקבצים, מאחר שרשומות בתוך קובץ אמורות לספק הגדרה מחדש של שטח פיזי בזכרון באופן אוטומטי. לעומת זאת, ניתן להשתמש בו ברמה 01 בקטע האחסון-לעבודה.

אם פריט ברמה מסויימת חייב להיות מוגדר מחדש, הפריט השני, המקביל לו, חייב להיות באותה רמה. הרישום 03 FLD1  PIC  X   ניתן להגדרה-מחדש רק ברמה 03. יחד עם זאת, מותרת חלוקה נוספת של פריטים, העוברים הגדרה-מחדש. הדוגמאות הבאות הן הגדרות תקינות:

דוגמא 1

02  FLD1.

03  FLD1A  PIC  X(5).

03  FLD1B  PIC  99.

02  FLD2  REDEFINES  FLD1  PIC  X(7).

 

דוגמא 2

02  FLDX  PIC  X(7).

02  FLDY  REDEFINES  FLDX.

03  FLDY1  PIC  X(5).

03  FLDY2  PIC  99.

בדוגמא 1 רואים, כי רישום שיש להגדירו מחדש יכול להיות פריט קבוצתי עם תת-שדות אלמנטריים. באופן דומה, כמתואר בדוגמא 2, רישום המגדיר מחדש שדה אחר, עשוי להכיל פירוט של תת-שדות. הדרישה היחידה היא, שאם שדה אחד מגדיר-מחדש שדה אחר, שניהם חייבים להיות באותה רמה. נוסף על כך, השדה המגדיר-מחדש חייב לבוא מייד אחרי השדה אותו מגדירים-מחדש, ללא רישומים חוצצים, המגדירים אזורי-אחסנה.

איסור נוסף ואחרון, הקשור ל-REDEFINES: רישום המגדיר-מחדש אינו יכול להכיל משפט VALUE. זאת הסיבה לכך, שאם דרושים ערכים התחלתיים באחד מאזורי אחסנה, ערכים אלה חייבים להופיע ברישום הראשון, ולא בזה המגדיר אותו מחדש. לכן הרישום להלן אינו תקין: 

לא תקין

02  ITEM1  PIC  99.

02  ITEMX  REDEFINES  ITEM1   PIC  XX  VALUE ‘12’.

יצויין, בכל זאת, שהרישום המקורי ברמה 02, מותר לו להכיל משפט VALUE:

תקין

02  ITEM1  PIC  99 VALUE 12.

02  ITEMX  REDEFINES  ITEM1   PIC  XX.

כפי שהזכרנו, אחד השימושים החשובים של משפטי REDEFINES הוא בתיאורה של רשומה בה עשויים להופיע מאפיינים שונים לאותו שדה. נתבונן, לדוגמא, בתיאורי-הרשומה הבאים:

 

 

 

FD  FILE-IN  LABEL RECORDS ARE OMITTED 

DATA RECORD IS REC-IN.

01 REC-IN.

02 NAME  PIC  A (10).

02 AMT  PIC  9 (5).

02 CDE  PIC  X (5).

02 FILLER  PIC  X (60).

FD  FILE-OUT  LABEL RECORDS ARE STANDARD 

DATA RECORD IS REC-OUT.

01 REC-OUT.

02 NAME  PIC  A (10).

02 AMT  PIC  9 (5).

02 CDE  PIC  X (5).

FILE-IN ו-FILE-OUT, כשמות של קבצים, חייבים להיות ייחודיים. באופן דומה REC-IN ו-REC-OUT, כשמות של רשומות, אף הם חייבים להיות ייחודיים. אולם NAME, AMT ו-CDE, שהם שדות-נתונים בתוך רשומות, אינם חייבים להיות ייחודיים; כלומר, ניתן להשתמש בהם להגדרת יותר מאזור אחד של אחסנה. בחטיבת-הביצוע - כאשר מגיעים לשם-נתונים שאינו ייחודי, שם זה חייב להיות מזוהה (qualified). עלינו לציין לאיזו רשומה יש לגשת. איננו יכולים לומר, לדוגמה: ADD AMT  TO  TOTAL, מאחר ש-AMT הוא שמם של שני שדות-נתונים שונים, ואין זה ברור איזה מהם יש לחבר. כאשר ליותר משדה אחד באחסנה יש אותו שם, אנו מזהים את השם בחטיבת הביצוע באופן הבא:

} שם רשומה}   [OF]  ( שם נתונים)

}  פריט מקובץ }           [ON]

 

דוגמאות

1.  ADD AMT IN FILE-IN  TO  TOTAL.

2.  MOVE  NAME  IN  FILE-IN  TO  NAME  IN  FILE-OUT.

3.  IF  NAME  IN  FILE-IN  =  SPACES  

THEN  MOVE  ‘MISSING’  TO  NAME  IN FILE-OUT.

בכל פעם, שבחטיבת הנתונים משתמשים באותו שם יותר מפעם אחת, עלינו לזהותו בשעת עיבודו בחטיבת הביצוע. מילות המפתח OF, IN משמשות לזיהויו של שם, וניתנות להחלפה זו בזו. שיטה זו של שימוש באותו שם-נתונים להגדרת כמה שדות ברשומות נבדלות, הוא מכשיר-תכנות שימושי. אם משתמשים בזיהוי שמות, רישומים בחטיבת-הביצוע נעשים קלים יותר להבנה לקורא התכנית, וקלים יותר לניפוי משגיאות על ידי המתכנת, האמירה MOVE  AMT  IN  REC-IN  TO  AMT  IN  REC-OUT. היא, יחסית, פשוטה להבנה. האמירה MOVE  AMT1  TO  AMT2., שבה AMT1 ו-AMT2 הם שדות המוגדרים באופן ייחודי באיזורי הקלט והפלט, בהתאמה, היא פחות ברורה. למרות שהאחרונה כרוכה בפחות כתיבה, על הקורא לבדוק את רישומי חטיבת הנתונים כדי לקבוע איזה איזור באחסנה מועבר, ואיזה שדה יקבל את הנתונים. כלומר, מיקומם של AMT1 ו-AMT2 באחסנה אינו ברור. מזהים מבהירים באופן מוחלט, ששדות הכמות (AMT) הם חלק מרשומות הקלט והפלט. כאשר רשומה מכילה כמה שדות שיש להציב ברשומה אחרת, נוכל להשתמש בשמות-שדה זהים בשילוב עם הוראת MOVE  CORRESPONDING, כמתואר בפרק 7. בדרך זו, זיהוי השמות בחטיבת הביצוע אינו דרוש כלל.לא פעם נתקשה לעקוב אחרי לוגיקה של תכנית, אם ניתוחה דורש התייחסות בלתי-פוסקת לחטיבת הנתונים. בעזרת הזיהוי השמות, ייקל עלינו לעקוב אחר הרישומים בחטיבת הביצוע. שדה ניתן לזיהוי על ידי שימוש ב-OF או ב-ON יחד עם שם הרשומה או כל פריט קבוצתי:

01  REC-1.

02  CODEX.

03  SEX  PIC  X.

03  MARITAL-STATUS  PIC  X.

03  AGE  PIC  99.

מכאן שניתן להשתמש ב-JUSTIFIED RIGHT בחטיבת הנתונים כדי לשנות את הכללים המקובלים של פעולות הצבה אלפאנומריות. באופן רגיל שדות אלפאנומריים מיושרים לשמאל; שימוש בפסוק דלעיל, בשדה אלפאנומרי, יגרום לכך, שנתונים המכילים פחות תווים מהשדה המקבל יוצבו במקומות הימניים ביותר של השדה, וכל המקומות בעלי הערך הגבוה שלא מולאו ימולאו ברווחים. המשפט JUSTIFIED RIGHT ניתן לשימוש עבור כל שדה אלמנטרי (יסודי) לא-מספרי. פסוק זה יימצא לאחר הגדרת ה-PICTURE, ולאחר שהערך ההתחלתי - VALUE, אם קיים, ייקבע.

ההוראה MOVE ‘C’  TO  FLD1., כאשר FLD1 מוגדר על פי התבנית:

FLD1  PIC  XXX  JUSTIFIED RIGHT , תציב __C ב-FLD1. כלומר, השימוש ,במשפט JUSTIFIED RIGHT מביא לכך, שכל VALUE שניתן לשדה, או כל נתון המוצב בשדה, לא יצייתו לכללים האלפאנומריים הרגילים. במקום זאת, כל הנתונים, שיוצבו בשדה, יהיו מיושרים לימין. לעתים קרובות משתמשים במשפט JUSTIFIED RIGHT באזור הדפסה (PRINT  AREA). נגדיר רשומת הדפסה כך:

01 PRINT-REC.

  02 FILLER  PIC  X(61).

  02 HEADER   PIC  X(12).

  02 FILLER  PIC  X(60).

בחטיבת הביצוע נקודד את ההוראות הבאות:

MOVE  SPACES TO  PRINT-REC.

MOVE ‘COMPANY AMDOCS’  TO  HEADER.

WRITE  PRINT-REC.

בדרך זו נקבל את הכותרת ‘COMPANY AMDOCS’ במרכז הגליון, עם 60 רווחים מכל צד שלה. אולם נוכל לפשט את הרישום בחטיבת הנתונים כך:

01  PRINT-REC.

02  HEADER  PIC  X(73)  JUSTIFIED RIGHT.

02   FILLER  PIC  X(60).

השימוש באותה חטיבת-ביצוע כמו קודם, יביא לתוצאות זהות לקודמות. COMPANY AMDOCS ימוקם ב-12 המקומות הימניים ביותר של HEADER, בהשאירו 60 מקומות מסדר גבוה, או שמאליים, ריקים. כך הגדרנו את רשומתנו עם שני שדות במקום שלושה. המשפט JUSTIFIED RIGHT משנה את הכללים הרגילים של פעולות הצבה אלפאנומריות. לכן משפט זה אינו ניתן לשימוש בהקשר לשדות בעלי הגדרת PICTURE מספריים (נומריים), מאחר ששדות כאלה ממילא תמיד מיושרים לימין.

אם שם-הנתונים SEX מוגדר כמה פעמים בחטיבת הנתונים, ניתן להגיע אל השדה SEX, שמתואר לעיל כך:

SEX  IN  REC-1

או

SEX  IN  CODEX

 סדר מודרג של ביצוע התנאים הנ"ל.

סיכום

  1. שמות קבצים, שמות רשומות, ושמות-נתונים באזור האיחסון לעבודה ברמה 77 - חייבים להיות ייחודיים, כלומר לשמש לקובץ אחד או לרשומה אחת.

  2. שמות, המגדירים שדות-נתונים בתוך רשומה, אינם חייבים להיות ייחודיים.

  3. אותו שם יכול להגדיר אזורים שונים בחטיבת הנתונים.

  4. יחד עם ואת, בכל פעם שניגשים לשדות אלה בחטיבת-הביצוע, חייבים לזהותם.

  5. התבנית, המשמשת לזיהויו של שדה, היא:                           

    } שם רשומה}   [OF]  ( שם נתונים)

    פריט מקובץ }           [ON]

קודם | תחילת הדף | הבא

שאלות להערכה עצמית >>

 

נושאים

פרק 3 - חטיבת הזיהוי                               (IDENTIFICATION DIVISION)
פרק 6 - חטיבת הביצוע                               (PROCEDURE DIVISION)
פרק 14 - הוראת DISPLAY ו-ACCEPT

.איתן 2002. כל הזכויות שמורות למערכת המידע איתן ©