קבצים
עד כה עסקנו בתוכניות שכאשר נסתיימו נעלמו איתן הנתונים. בהרצה חדשה היה צורך לקלוט שוב את הנתונים.
לדוגמא כאשר רוצים לשמור נתונים מסוימים על בחינה מתקרבת, רושמים את הנתונים הנמסרים ע"י המורה ומתייקים את המידע במחברת.
כך,גם בביצוע תוכניות רוצים לשמור את הנתונים והתוצאות של תוכנית מסוימת על קובץבדיסק, ובכל פעם שנזדקק לנתונים אלו מחדש, התוכנית תקלוט אותם מקובץ זה.
הקשת הנתונים אורכת אולי שעה אבל מה אם רוצים לעדכן את ספר הטלפונים...
בפסקל להגדיר קובץ ולשמור ולקרא ממנו מידע.
נניח כי נתונה התוכנית הבאה המגדירה קובץ:
program FILE; var F1:file of integer; begin · · end. |
בהגדרת הקובץ פגשנו בשם קובץ ולאחריו סוג הקובץ.במקרה זה הקובץ מיועד לשמור ערכים שלמים בלבד.
ניתן היה לרשום:
;F1:file of real
ואז הקובץ היה מיועד לשמור ערכים ממשים בלבד.
או:
; F1:file of char
כאשר הקובץ מיועד לשמור ערכים תווים בלבד.
אופן הגדרת הקובץ:
;סוג המשתנים file of :שם הקובץ |
הקובץ הוגדר,ומיד נראה כיצד ניתן לקרוא ולכתוב לו נתונים.אבל הקובץ הוגדר בתוכנית ויש לתת לו שם כך שיוכל להישמר על הדיסק.
הפסקל משתמש בשירותי ה-DOS לצורך שימוש בדיסק.לכן צריך לספק ל-DOS את השם שיופיע על הדיסק.שם שנראה כאשר נקיש DIR ע"מ לראות איזה קבצים יש על הדיסק.
ההוראה assign מאפשרת ל-DOS לרשום את הקובץ על הדיסק.
program FILE; var F1:file of integer; begin assign(F1,'AAA.DAT'); · · · end. |
כלומר,ההוראה assign אומרת:קשר את הקובץ ששמו בתוכנית F1 לקובץ על הדיסק לשימוש ה-DOS.הקובץ המופיע על הדיסקט יירשם כמחרוזת.כלומר בין גרש שמאלי לימני.
('שם הקובץ על הדיסק',שם הקובץ בתוכנית)assign |
ניתן היה כמובן, לרשום כל שם אחר במקום AAA.DAT כמו:
;('assign(F1,'F1
כלומר,אפילו אותו שם.רק צריך לזכור ש-DOS לא מקבל יותר מ-8 תווים בשם הקובץ ושלושה תווים כתוספת אחרי הנקודה.כלומר,האורך המקסימלי של שם הקובץ לשימוש ה-DOS הוא:
XXXXXXXX.XXX
בהמשך התוכנית, בכל פעם שיירשם הקובץ F1,באופן אוטומטי הפסקל יאמר ל-DOS את השם המכוון אליו.
השלב הראשון לשימוש בקובץ הוא הצורך ליצור קובץ כך שנוכל לכתוב אליו נתונים.לצורך הכנת קובץ לכתיבה נשתמש בהוראת rewrite כלומר,כתוב מחדש.
נניח כי רוצים לכתוב לקובץ F1,לכן נרשום:
program FILE; var F1:file of integer; begin assign(F1,'AAA.DAT'); rewrite(F1); · · · end.
ע"י כך שרשמנו את ההוראה rewrite ובסוגריים את הקובץ (המתקשר לשם הקובץ בתוכנית ולא לשם הנמסר ל-DOS ),פתחנו את הקובץ והכנו אותו לכתיבה.
אם הקובץ לא קיים, ה-DOS ידאג לפתיחת קובץ חדש.
אם הקובץ כבר קיים ,הקובץ הקיים יימחק ויוכן שוב לכתיבה.
הכנת קובץ לכתיבה: ;(שם הקובץ בתוכנית)rewrite |
לצורך רישום נתונים לקובץ זה,נשתמש בהוראת write בלבד המוכרת לנו:
program FILE; var F1:file of integer; begin assign(F1,'AAA.DAT'); rewrite(F1); write(F1,I,I,I); · · · end.
בקטע תוכנית זו,רשמנו בקובץ F1 שלושה נתונים המאוחסנים
במשתנה I. תחילה רושמים את שם הקובץ ולאחריו פסיק
והמשתנים שיישמרו בקובץ עם פסיקים מפרידים.
כתיבה לקובץ המאחסן סוג משתנה אחד: ;(...,משתנה,משתנה,שם קובץ בתוכנית)write |
סיימנו את הכתיבה לקובץ ועתה הגיע זמן סגירתו של הקובץ:
program FILE; var F1:file of integer; begin assign(F1,'AAA.DAT'); rewrite(F1); write(F1,I,I,I); close(F1); end.
ההוראה close סוגרת את הקובץ.
שם הקובץ נרשם בין הסוגריים.כל קובץ שניפתח חייב להסגר לפני סיום התוכנית.
סגירת קובץ: ;(שם הקובץ בתוכנית)close |
דוגמא:
כתוב תוכנית הרושמת לקובץ את כל המספרים בין 1 ל- 100.
פיתרון:
להורדת הדוגמא לחץ כאן
נביט לתוך הקובץ כדי להבין את המנגנון הפנימי המבצע את הכתיבה.
בדיסק הקובץ נשמר משתנה אחר משתנה במקום הפנוי הראשון שנמצא.
קיים מצביע סמוי המדלג למקום הבא הפנוי בכל פעם שרשמנו תוכן משתנה לדיסק.כאשר הקובץ נסגר ע"י ההוראה close,אזי נרשם תו מיוחד המציין את סיומו של הקובץ.תו זה הכרחי להמשך פעולה תקין של עבודה עם הקבצים הנמצאים על הדיסק.
כדי שנוכל לקרוא שוב מהקובץ יש להעמיד את המצביע בתחילת הקובץ ולשם כך קיימת ההוראה reset.
ההוראה reset תשמש את התוכנית בכל פעם שנרצה להציב את המצביע על תחילת הקובץ.