פרק 8 קטעי האחסון לעבודה.

א. פריטים ומשפטי עצמאיים VALUE.

כזכור לך, מתחלקת חטיבת הנתונים לשני קטעים: קטע הקבצים  וקטע שטחי האחסון לעבודה .

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

  בקטע שטחי-האחסון-לעבודה ישנם שני סוגי שדות

  1. פריטי מידע עצמאיים ברמה 77.

  2. פריטים מקובצים - המחולקים לפריטים עצמאיים בסיסיים.

פריטים ברמה 77 אינם בשימוש נפוץ. אנו נדגיש, לכן, את השימוש בפריטים מקובצים, שניתן לחלקם לפריטים בסיסיים עצמאיים, כפי שמופיע בדוגמה הבאה:

WORKING-STORAGE             SECTION.      

01 WORK-AREAS.                                        

02 EOF                PIC 9            VALUE 0.

02 GROSS-AMT   PIC 999V99   VALUE 0.

השימוש בפריטים עצמאיים בקטע שטחי האחסון לעבודה

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

דוגמא 1

המחיר נטו (NET-PRICE) שווה למחיר היחידה (UNIT-PRICE), מוכפל בכמות (QTY), פחות סכום ההנחה (DISC-AMT).

כדי לקבל את המחיר נטו, נדרשים שני צעדים:

הכפלה:

.MULTIPLY UNIT-PRICE BY QTY GIVING GROSS-AMT    

GROSS-AMT הוא המחיר ברוטו (לפני ההנחה). הוא צריך להוות פריט עצמאי המוגדר בקטע שטחי העבודה, מאחר שאינו חלק מהקלט, אלא תוצאת ביניים, שממנה מחשבים את המחיר נטו           (NET-PRICE).  

חיסור:

.SUBTRACT  DISC-AMT  FROM  GROSS-AMT  GIVING  NET-PRICE

הפריט העצמאי GROSS-AMT הוא אפוא שדה ביניים, הנוצר בעת ההכפלה, וממנו מיוצרת לבסוף תוצאת הפלט.

 

דוגמא 2

נניח, שאנו רוצים לספור את מספר הרשומות בקובץ כלשהו. להלן חלק מן התכנית:

.MOVE  ZERO  TO CTR

.PERFORM BEGIN UNTIL EOF =  1

.MOVE CTR TO PRINT-A

.WRITE PRINT-REC

.BEGIN

.READ FILE-1 AT END MOVE 1 TO EOF

.ADD 1 TO CTR

גם CTR (שהוא קיצור של COUNTER, משתנה ספירה) הוא שדה, שאינו חלק מן הקלט, אך נדרש לשם עיבוד הנתונים. ניתן להגדירו כפריט עצמאי, המפורט בקטע שטחי-העבודה. שים לב, שגם EOF צריך להיות פריט עצמאי בקטע שטחי-העבודה.

  כללים לכתיבת פריטים עצמאיים

  1. כמו כל הקטעים, מקודד קטע שטחי-העבודה  במרווח-A.

  2. קטע שטחי העבודה יבוא תמיד לאחר קטע הקבצים.

  3. פריטי מידע עצמאיים יכולים לבוא כחלק מפריט מקובץ (או כפריטים מיוחדים ברמה 77 ).

  4. את הפריט המקובץ כותבים ברמה 01 במרווח-A. את הפריטים העצמאיים כותבים ברמות כלשהן, הכפופות לרמה 01.

  5. שמות-הנתונים בקטע זה תואמים את הכללים ליצירת שמות-נתונים (משתנים).

  6. לכל פריט עצמאי חייב להיות משפט PICTURE או PIC, המגדיר אותו:

X מציין נתונים אלפאנומריים.

A מציין נתונים אלפביתיים.

9 מציין נתונים מספריים.

דוגמא 

WORKING-STORAGE    SECTION.                       

01 WORK-AREAS.                                         

02 INTERMEDIATE-TOTAL   PIC 9(5)V99.

02 CONSTANT-1   PIC  X(4).                    

02 FLDA   PIC  X(3).                    

משפטי - VALUE.  

כמו בקטע הקבצים, גם כאן גודל השדה נקבע ע"י מספר האותיות A או Xאו הספרות 9.  

לפריטים עצמאיים בקטע שטחי-העבודה יש לתת בדרך כלל ערך התחלתי, כלומר, לאחסן בהם נתון התחלתי ע"י משפט VALUE.

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

כדי להבטיח, שרשומות או שדות פלט, המפורטים בקטע הקבצים, יהיו ריקים עם תחילת התכנית, אנו מציבים בהם תווי רווח (SPACES) בחטיבת הביצוע, לפני התחלת העבודה. לעומת זאת, בקטע שטחי-העבודה, אנו יכולים לתת לפריט ערך התחלתי ע"י שימוש במשפט VALUE.

דוגמא 

WORKING-STORAGE    SECTION.                       

01 WORK-AREAS.                                                 

02 TOTAL   PIC 9(3) VALUE ZEROS.               

02 CONSTANT-1   PIC X(4) VALUE SPACES.              

אין הכרח לציין VALUE לכל פריט עצמאי, אולם אם הושמט משפט VALUE, לא ניתן להניח כל הנחה לגבי תכולתו הראשונית של השדה. אם אין מציינים כל VALUE, מוטב להשתמש בהוראת הצבה (MOVE) בחטיבת הביצוע, כדי לתת לשדה ערך התחלתי. אם כן, לציון פריטים עצמאיים בקטע שטחי-האחסון-לעבודה, יש להשתמש בארבע האפשרויות הנ"ל, שמתוכן שלוש הן הכרחיות:

  פריטים עצמאיים בקטע שטחי-ענודה

  1. כתיבת רמה 01 במרווח A -  מציינת למחשב, כי אנו עומדים להגדיר פריט-נתונים מקובץ. פריטים עצמאיים יכתבו ברמות, הכפופות לרמה 01.

  2. השם, הניתן על ידי המתכנת, מגדיר את השדה.

  3. גודלו ועיצובו של השדה מוגדרים במשפט PICTURE.

  4. ניתן לאחסן בשדה ערך התחלתי ע"י משפט VALUE .

משפט ה-VALUE יכיל קבוע או קבוע מיוחד, אשר יוצב בשדה. הוא צריך להיות מאותו סוג, שהוגדר במשפט ה-PICTURE. אם משפט ה-PICTURE הגדיר שדה מספרי, הערך צריך להיות קבוע מספרי, או אפס(ים) (ZEROS(S)).

דוגמא 

WORKING-STORAGE    SECTION.                       

01 WORK-AREAS.                                                 

02 TOTAL   PIC 9(4) VALUE ZERO.              

02 CONSTANT-1   PIC  9(5) VALUE 07600 

02 FICA   PIC  V9(4) VALUE .0617  .

שים לב: המשפט 02 TOTAL   PIC 9(4) VALUE ZERO. הינו שווה ערך להגדרת פריט ברמה 02 ללא משפט VALUE, ומתן ההוראה הבאה בחטיבת הביצוע: MOVE ZERO TO TOTAL. באופן דומה, המשפט 02 FICA   PIC  V9(4) VALUE .0617. זהה להכנסת ההוראה MOVE .0617 TO FICA., כאשר ל-FICA אין משפט VALUE. מאחר שמשפט VALUE מבצע את אותה פעולה כמו הוראת-MOVE, הרי שחלים עליו כל הכללים של הוראת-MOVE.

דוגמא 

02  FLDA  PIC 9(3)  VALUE  12.

הדוגמא לעיל זהה להצבת הערך 12 ב-FLDA. לפי כללי הוראת-MOVE מספרית (ראה פרק 7), יקבל FLDA את הערך 012. כדי להשיג בשדה המקבל תוכן זהה בדיוק לנתון המפורש, נשתמש, בדדך כלל, במשפט PICTURE, המגדירו באופן המתאים. כדי לקבל את הערך 12 - בFLDA, יש להגדירו ב-PICTURE 99 . גם החוקים של שדות אלפאנומריים תקפים לגבי פריטים עצמאיים בקטע שטחי-העבודה. אם לשדה מתאים משפט PICTURE אלפאנומרי או אלפביתי, על משפט ה-VALUE שלו (אם יש כזה) להכיל קבוע מפורש, שאינו מספרי.

דוגמא 

WORKING-STORAGE    SECTION.                       

01 WORK-AREAS.                                                 

02 DATEX   PIC X(5) VALUE 'APRIL'.

02 FLDB   PIC  X(3) VALUE SPACES .

תהיה זו שגיאה לומר, 02 FLDB   PIC  X VALUE 3 .. שדה, שהוגדר במשפט PICTURE X, צריך לקבל משפט-VALUE, שיכיל קבוע שאינו מספרי. המשפט הנכון יהיה:

02 FLDB   PIC  X  VALUE '3' .

באופן דומה, אין לומך 02 TOTAL PIC 99 VALUE  SPACES. מאחר שתו-רווה (SPACE) אינו תו מספרי חוקי. בקבועים מספריים ניתן להשתמש רק בספרות 0 עד 9, נקודה עשרונית, וסימני + או - . כדי לנקות שדה מספרי, אנו מציבים בו אפסים, ולא רווחים. המשפט שלעיל צריך להיות:

02 TOTAL PIC 99 VALUE  ZERO.

כזכור, ניתן להכניס פסיקים בכל מקום בתכנית, בתנאי שאחרי תו הפסיק יופיע תו-רווח אחד לפחות. יצויין, שאסור להשתמש במשפט VALUE להצבת ערך התחלתי בשדות בקטע הקבצים של חטיבת הנתונים. משפטי-VALUE יכולים להופיע רק בקטע שטחי-העבודה. הצבת אפסים ב-TOTAL בתחילת הביצוע שוות-ערך להצבת ערך התחלתי אפס בשטח העבודה, באמצעות VALUE. אם יאוחסן אח"כ מידע ב-TOTAL, כבר לא יהיה ערכו אפס.

WORKING-STORAGE  SECTION.

01  WORK-AREAS.                                 

02  TOTAL  PIC 9(5)  VALUE  ZERO.

              ...                    

PROCEDURE  DIVISION.                 

              ...                        

.ADD 5800 TO TOTAL       

בנקודה זו יש ל-TOTAL ערך של 05800, ולא אפס. לעומת זאת, אם לא הצבנו ערך התחלתי 0 ב-TOTAL, לא נוכל לצפות מה יהיה ערכו לאחר ביצוע פעולת החיבור (ADD). שדה, שלא קיבל ערך התחלתי - לא ניתן לדעת את ערכו.שים לב, כי אפשר להחליף קבוע, בו משתמשים בחטיבת הביצוע, בפריט נתונים עצמאי. ההוראה:

IF CDE = 0 THEN                        

MOVE 'CR' TO CREDIT-AREA.

זהה להוראה: 

IF CDE = 0 THEN                        

MOVE CREDIT TO CREDIT-AREA.

כאשר CREDIT הוא פריט-נתונים עצמאי, שהוגדר כך:

02  CREDIT  PIC  XX VALUE  'CR'.

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

על משפט-VALUE של שדה מספרי להכיל קבוע מספרי:

02  FLDA  PIC  99V99  VALUE  12.34 .

12.34 הוא קבוע מספרי. כזכור, קבועים או שדות מספריים מקבלים אורך מירבי של 18 ספרות. לכן, הגדרה הניתנת לפריט מספרי במשפט-VALUE  או משפט-  PICTURE, אסור שתהיה ארוכה יותר מ 18 ספרות.

משפטי- VALUE שאינם מספריים

משפט VALUE שאינו מספרי, יכול, שלא כמו קבוע מספרי, להכיל עד 120 תווים. ההגדרה במשפט  VALUE שאינו מספרי, כמו בקבוע שאינו מספרי, תופיע בין גרשיים, ותהיה באורך מירבי של 120 תווים.

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

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

 

נושאים

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

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