לעיתים
דרוש להגדיר שדה יחיד בחטיבת הנתונים, נשני
אופנים שונים או יותר. אם אותו אזור צריך
לשמש למטרות שונות, אנו חייבים להגדירו
בתבנית נוספת (REDEFINE)
בחטיבת הנתונים. כדי לתאר רשומות אלה, נוכל לקבוע שתי תבניות רשומה נפרדות ב-FD , כדלקמן:
יצויין,
כי שתי הרשומות תופסות את אותו אזור אחסנה (storage area)
בן 80 המקומות. הרשומה הראשונה מפרטת את
מאפייני השדה; הרשומה השניה מגדירה, בפשטות,
מחדש את אותו אזור, תוך שימוש במאפיינים משלה.
בחטיבת הביצוע נוכל לבדוק את CODE-X: אם ערכו 1 , נשתמש
בתבנית של DB-REC; אם ערכו 0,
נשתמש בתבנית של CR-REC. ניתן בCOBOL לפשט את תיאור הרשומה (File
Description) הנ''ל, על ידי
הגדרת תבנית רשומה אחת בלבד, תוך הגדרה-מחדש
של האזור היחידי, המשתנה בהתאם לצופן CODE-X.
בתיאור דלעיל,UNIT-PRICE ו-AMT-OF-CREDIT. מתייחסים שניהם לאותם חמישה מקומות-אחסנה. בחטיבת הביצוע - נבדוק את תוכנו של CODE-X. אם CODE-X = 1, נשתמש ב-UNIT-PRICE כשם לשדה שלם בעל חמישה המקומות. אם 0 = CODE-X, נשתמש ב-AMT-OF-CREDIT. כשם לשדה עם שלושה מקומות לחלק השלם, ושני מקומות לשבר עשרוני.
ניתן
להשתמש במשפט REDEFINES בכל רמה שבין 02-49. לא ניתן להשתמש בו
ברמה 01
בקטע הקבצים, מאחר שרשומות בתוך קובץ
אמורות לספק הגדרה מחדש של שטח פיזי בזכרון
באופן אוטומטי. לעומת זאת, ניתן להשתמש בו
ברמה 01 בקטע האחסון-לעבודה. אם פריט ברמה מסויימת חייב להיות מוגדר מחדש, הפריט השני, המקביל לו, חייב להיות באותה רמה. הרישום 03 FLD1 PIC X ניתן להגדרה-מחדש רק ברמה 03. יחד עם זאת, מותרת חלוקה נוספת של פריטים, העוברים הגדרה-מחדש. הדוגמאות הבאות הן הגדרות תקינות:
בדוגמא 1 רואים, כי רישום שיש להגדירו מחדש יכול להיות פריט קבוצתי עם תת-שדות אלמנטריים. באופן דומה, כמתואר בדוגמא 2, רישום המגדיר מחדש שדה אחר, עשוי להכיל פירוט של תת-שדות. הדרישה היחידה היא, שאם שדה אחד מגדיר-מחדש שדה אחר, שניהם חייבים להיות באותה רמה. נוסף על כך, השדה המגדיר-מחדש חייב לבוא מייד אחרי השדה אותו מגדירים-מחדש, ללא רישומים חוצצים, המגדירים אזורי-אחסנה. איסור נוסף ואחרון, הקשור ל-REDEFINES: רישום המגדיר-מחדש אינו יכול להכיל משפט VALUE. זאת הסיבה לכך, שאם דרושים ערכים התחלתיים באחד מאזורי אחסנה, ערכים אלה חייבים להופיע ברישום הראשון, ולא בזה המגדיר אותו מחדש. לכן הרישום להלן אינו תקין: לא
תקין
תקין
כפי
שהזכרנו, אחד השימושים החשובים של משפטי REDEFINES
הוא בתיאורה של רשומה בה עשויים להופיע
מאפיינים שונים לאותו שדה. נתבונן, לדוגמא,
בתיאורי-הרשומה הבאים:
FILE-IN ו-FILE-OUT, כשמות של קבצים, חייבים להיות ייחודיים. באופן דומה REC-IN ו-REC-OUT, כשמות של רשומות, אף הם חייבים להיות ייחודיים. אולם NAME, AMT ו-CDE, שהם שדות-נתונים בתוך רשומות, אינם חייבים להיות ייחודיים; כלומר, ניתן להשתמש בהם להגדרת יותר מאזור אחד של אחסנה. בחטיבת-הביצוע - כאשר מגיעים לשם-נתונים שאינו ייחודי, שם זה חייב להיות מזוהה (qualified). עלינו לציין לאיזו רשומה יש לגשת. איננו יכולים לומר, לדוגמה: ADD AMT TO TOTAL, מאחר ש-AMT הוא שמם של שני שדות-נתונים שונים, ואין זה ברור איזה מהם יש לחבר. כאשר ליותר משדה אחד באחסנה יש אותו שם, אנו מזהים את השם בחטיבת הביצוע באופן הבא:
בכל פעם, שבחטיבת הנתונים משתמשים באותו שם יותר מפעם אחת, עלינו לזהותו בשעת עיבודו בחטיבת הביצוע. מילות המפתח 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 יחד עם שם הרשומה או כל פריט קבוצתי:
מכאן
שניתן להשתמש ב-JUSTIFIED
RIGHT בחטיבת הנתונים כדי לשנות את הכללים
המקובלים של
פעולות הצבה אלפאנומריות. באופן רגיל שדות
אלפאנומריים מיושרים לשמאל; שימוש בפסוק
דלעיל, בשדה אלפאנומרי, יגרום לכך, שנתונים
המכילים פחות תווים מהשדה המקבל יוצבו
במקומות הימניים ביותר של השדה, וכל
המקומות בעלי הערך הגבוה שלא מולאו ימולאו
ברווחים. המשפט JUSTIFIED
RIGHT ניתן לשימוש עבור כל שדה אלמנטרי (יסודי)
לא-מספרי. פסוק זה יימצא
לאחר הגדרת ה-PICTURE, ולאחר שהערך ההתחלתי - VALUE, אם קיים, ייקבע. FLD1
PIC XXX
JUSTIFIED RIGHT , תציב __C ב-FLD1.
כלומר, השימוש ,במשפט JUSTIFIED
RIGHT מביא לכך, שכל VALUE שניתן לשדה, או כל נתון המוצב בשדה, לא
יצייתו לכללים
האלפאנומריים הרגילים. במקום זאת, כל
הנתונים, שיוצבו בשדה, יהיו מיושרים לימין.
לעתים קרובות משתמשים במשפט JUSTIFIED RIGHT
באזור הדפסה (PRINT AREA). נגדיר רשומת
הדפסה כך:
בחטיבת הביצוע נקודד את ההוראות הבאות: MOVE
SPACES TO PRINT-REC. MOVE
‘COMPANY AMDOCS’ TO HEADER. WRITE PRINT-REC. בדרך
זו נקבל את הכותרת ‘COMPANY AMDOCS’
במרכז הגליון, עם 60 רווחים מכל צד שלה. אולם
נוכל לפשט את הרישום בחטיבת הנתונים כך:
השימוש
באותה חטיבת-ביצוע כמו קודם, יביא לתוצאות
זהות לקודמות. COMPANY AMDOCS
ימוקם ב-12
המקומות הימניים ביותר של HEADER, בהשאירו 60 מקומות מסדר גבוה, או
שמאליים, ריקים. כך הגדרנו
את רשומתנו עם שני שדות במקום שלושה. המשפט JUSTIFIED
RIGHT משנה את הכללים הרגילים של פעולות
הצבה אלפאנומריות. לכן משפט זה
אינו ניתן לשימוש בהקשר לשדות בעלי הגדרת PICTURE מספריים (נומריים), מאחר
ששדות כאלה ממילא
תמיד מיושרים לימין. SEX
IN REC-1 או
SEX
IN CODEX סדר מודרג של ביצוע התנאים הנ"ל.
|
פרק 1 - מבוא לתכנות COBOL.
פרק 2 - ארגון נתונים
פרק 3 - חטיבת הזיהוי
(IDENTIFICATION DIVISION)
פרק 4 - חטיבת הסביב
(ENVIRONMENTAL DIVISION)
פרק 5 - חטיבת הנתונים
(DATA DIVISION)
פרק 6 - חטיבת הביצוע
(PROCEDURE DIVISION)
פרק 7 - הוראת MOVE
פרק 8 - קטעי האחסון לעבודה
פרק 9 - הוראות אריתמטיות
פרק 10- הוראות תנאי
פרק 11 - רישומים נוספים בחתיבת הנתונים
פרק 12 - עריכת פלט מודפס
פרק 13 - הוראות מיוחדות לעריכת הדפסה
פרק 14 - הוראת DISPLAY ו-ACCEPT
|
.איתן 2002. כל הזכויות שמורות למערכת המידע איתן © |