דילוג לתוכן המרכזי
מודול 5 · שיעור 2 מתוך 210/10 בקורס~15 min
שיעורי מודול (2/2)

פעולות קלט/פלט של קבצים

לאחר שקובץ שויך והכריז ב-DATA DIVISION, נוכל לתפעל אותו בתוך ה-PROCEDURE DIVISION. ב-COBOL, ניהול מחזור החיים של קבצים פועל לפי זרימה סטנדרטית, חיונית: פתיחה, ביצוע פעולות (קריאה או כתיבה) וסגור.


1. פתיחת קבצים: הצהרת OPEN

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

COBOL
       OPEN INPUT SALES-FILE.

המצבים העיקריים הם:

  • INPUT: הקובץ נפתח במצב קריאה בלבד. הקובץ חייב להתקיים בדיסק, אחרת התוכנית תיכשל.
  • OUTPUT: הקובץ נפתח במצב כתיבה. אם הקובץ כבר קיים, התוכן הקודם שלו נמחק (החלפה). אם זה לא קיים, זה נוצר.
  • EXTEND: הקובץ נפתח כדי להוסיף נתונים. רשומות חדשות ייכתבו החל מסוף הקובץ הקיים.
  • I-O: הקובץ נפתח הן לקריאה והן לכתיבה (משמש בעיקר לקבצי גישה יחסית או באינדקס, לא לקבצים עוקבים ליניאריים).

2. קריאת נתונים: הצהרת READ

כדי לקרוא רשומה מקובץ רציף, אנו משתמשים במשפט READ. מכיוון שאיננו יודעים מראש כמה רשומות מכיל הקובץ, עלינו לטפל תמיד בתנאי סוף הקובץ (EOF) באמצעות הסעיף AT END:

COBOL
       READ SALES-FILE
           AT END MOVE "Y" TO WS-EOF
       END-READ.
  • READ SALES-FILE: שימו לב שהמשפט מתייחס ל-שם הקובץ הלוגי (מוגדר בסעיפים SELECT וFD), לא לשם הרשומה.
  • AT END: מציין את ההוראות להפעלה כאשר אתה מנסה לקרוא מעבר לרשומה הזמינה האחרונה. בדרך כלל, אתה מגדיר משתנה דגל (כמו WS-EOF) ל-"Y".
  • END-READ: מסיים במפורש את הצהרת הקריאה.

3. כתיבת נתונים: הצהרת WRITE

כדי להוסיף נתונים לקובץ, אנו משתמשים בהצהרה WRITE.

[!אזהרה] ב-COBOL אתה קורא קובץ (READ SALES-FILE), אבל אתה כותב רשומה (WRITE SALES-RECORD). כתיבת WRITE SALES-FILE היא שגיאת תחביר נפוצה שתמנע קומפילציה.

COBOL
       MOVE 1001 TO EMP-ID.
       MOVE "MARIO ROSSI" TO EMP-NAME.
       WRITE SALES-RECORD.

לפני ביצוע ההצהרה WRITE, יש לאכלס בזיכרון את השדות הכפופים של מבנה הרשומות FD (במקרה זה, SALES-RECORD).


4. סגירת קבצים: הצהרת הסגירה

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

COBOL
       CLOSE SALES-FILE.

שים לב שהמשפט CLOSE לוקח את שם הקובץ הלוגי כארגומנט שלו, לא את שם הרשומה.


נסה את זה

פעילות גופנית#cobol.m5.l2.e1
ניסיונות: 0טוען...

השלם את חלוקת ה-PROCEDURE על ידי פתיחת SALES-FILE במצב קלט, קריאת הרשומה הראשונה והגדרת משתנה הבקרה WS-EOF ל-'Y' כשמגיעים לסוף הקובץ. לבסוף, זכור לסגור את הקובץ לפני עצירה.

טוען עורך...
הצג רמז

כתוב לפי הסדר: פתח קובץ מכירות קלט. לאחר מכן קרא את קובץ המכירה בסיום העבר 'Y' ל-WS-EOF END-READ. לאחר מכן סגור קובץ מכירות. ולבסוף STOP RUN.

הפתרון זמין לאחר 3 ניסיונות

פעילות גופנית#cobol.m5.l2.e2
ניסיונות: 0טוען...

השלם את חלוקת הפרוצדורה על ידי פתיחת SALES-FILE במצב פלט. העבר את הערך 1001 ל-SALES-ID ו-250.50 ל-SALES-AMOUNT, ולאחר מכן כתוב את SALES-RECORD לקובץ. לבסוף, סגור את הקובץ לפני הפסקת התוכנית.

טוען עורך...
הצג רמז

פתח את הקובץ עם OPEN OUTPUT SALES-FILE., השתמש ב-MOVE כדי להקצות ערכים ל-SALES-ID ו-SALE-AMOUNT, בצע WRITE SALES-RECORD. (כותבים את הרשומה, לא את הקובץ!), סוגרים עם CLOSE SALES-FILE. ולסיים עם STOP RUN.

הפתרון זמין לאחר 3 ניסיונות