שיעורי מודול (2/2)
פעולות קלט/פלט של קבצים
לאחר שקובץ שויך והכריז ב-DATA DIVISION, נוכל לתפעל אותו בתוך ה-PROCEDURE DIVISION. ב-COBOL, ניהול מחזור החיים של קבצים פועל לפי זרימה סטנדרטית, חיונית: פתיחה, ביצוע פעולות (קריאה או כתיבה) וסגור.
1. פתיחת קבצים: הצהרת OPEN
לפני שתוכל לקרוא או לכתוב לקובץ, יש לפתוח אותו על ידי ציון מצב הגישה המתאים:
OPEN INPUT SALES-FILE.המצבים העיקריים הם:
INPUT: הקובץ נפתח במצב קריאה בלבד. הקובץ חייב להתקיים בדיסק, אחרת התוכנית תיכשל.OUTPUT: הקובץ נפתח במצב כתיבה. אם הקובץ כבר קיים, התוכן הקודם שלו נמחק (החלפה). אם זה לא קיים, זה נוצר.EXTEND: הקובץ נפתח כדי להוסיף נתונים. רשומות חדשות ייכתבו החל מסוף הקובץ הקיים.I-O: הקובץ נפתח הן לקריאה והן לכתיבה (משמש בעיקר לקבצי גישה יחסית או באינדקס, לא לקבצים עוקבים ליניאריים).
2. קריאת נתונים: הצהרת READ
כדי לקרוא רשומה מקובץ רציף, אנו משתמשים במשפט READ. מכיוון שאיננו יודעים מראש כמה רשומות מכיל הקובץ, עלינו לטפל תמיד בתנאי סוף הקובץ (EOF) באמצעות הסעיף AT END:
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היא שגיאת תחביר נפוצה שתמנע קומפילציה.
MOVE 1001 TO EMP-ID.
MOVE "MARIO ROSSI" TO EMP-NAME.
WRITE SALES-RECORD.לפני ביצוע ההצהרה WRITE, יש לאכלס בזיכרון את השדות הכפופים של מבנה הרשומות FD (במקרה זה, SALES-RECORD).
4. סגירת קבצים: הצהרת הסגירה
בסיום העיבוד, יש לסגור כל קובץ פתוח כדי לשחרר משאבי מערכת ולהבטיח שכל הנתונים נכתבים לדיסק:
CLOSE SALES-FILE.שים לב שהמשפט CLOSE לוקח את שם הקובץ הלוגי כארגומנט שלו, לא את שם הרשומה.
נסה את זה
השלם את חלוקת ה-PROCEDURE על ידי פתיחת SALES-FILE במצב קלט, קריאת הרשומה הראשונה והגדרת משתנה הבקרה WS-EOF ל-'Y' כשמגיעים לסוף הקובץ. לבסוף, זכור לסגור את הקובץ לפני עצירה.
הצג רמז
כתוב לפי הסדר: פתח קובץ מכירות קלט. לאחר מכן קרא את קובץ המכירה בסיום העבר 'Y' ל-WS-EOF END-READ. לאחר מכן סגור קובץ מכירות. ולבסוף STOP RUN.
הפתרון זמין לאחר 3 ניסיונות
השלם את חלוקת הפרוצדורה על ידי פתיחת 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 ניסיונות