פעולות עם קבצים
דוגמא:
בקובץ F.TXT רשומים תווים.כתוב תת תוכנית הקוראת את 100 התווים הראשונים ורושמת לקובץ N.TXT רק את התווים שהם ספרות בלבד.
פיתרון:
program FILE_IN_OUT; var F_IN,F_OUT:file of char; (*קובץ פלט וקובץ קלט*) I:integer; (*משתנה הלולאה*) CH:char; (*התו שקוראים מקובץ הקלט*) · · קטע הבא לפני תת תוכנית זו · procedure READ_WRITE_TO_FILE; {תת תוכנית לקריאת תווים ולרישום בקובץ אחר רק את התווים שהם ספרות} begin {קשר את שמות הקבצים בתוכנית לקבצים על הדיסק} assign(F_IN,'F.TXT'); assign(F_OUT,'N.TXT'); {הכנה לקריאה של קובץ הקלט והכנה לכתיבה של קובץ הפלט} reset(F_IN); rewrite(F_OUT); for I:=1 to 100 do {הלולאה} begin read(F_IN,CH); if ( (CH>=0) and (CH<=9)) then write (F_OUT,CH); end; {סגירת הקבצים} close(F_IN);close(F_OUT); end; · · קטע הבא לפני תת תוכנית זו ·
|
בהוראה reset,rewrite ו- close ניתן לרשום קובץ אחד בלבד!!! |
הקבצים שהתוכנית רשמה בהם וקלטה מהם,היו קבצים מסוג מסיים ולא היה ניתן לרשום בקובץ אחד סוגים שונים של משתנים. עובדה זו מגבילה את יכולת השימוש בקבצים.
לכן, קיים קובץ המאפשר כתיבת כמה סוגי משתנים.מפאת השימוש הרב בקובץ זה הוא מוגדר במילה שמורה אחת בלבד.
var FILE_NAME:text; |
בקובץ מסוג text ניתן לרשום סוגי משתנים שונים.
דוגמא:
נתון קובץ מוצפן.הקובץ מכיל סדרה של תו ומספר באופן הבא:
מספר |
תו |
מספר |
תו |
מספר |
תו |
תחילת קובץ
ע"מ לפענח את הקובץ ,יש להפוך את התו למספר לפי קוד ASCII ולהוסיף לו את המספר שבא אחרי התוו ולהפכו לתו שוב.
דוגמא: כתוב תוכנית,הקוראת מהקובץ המוצפן את 1500 התווים הראשונים ורושמת בקובץ חדשלאחר פענוח.בסיום התהליך,יש לקרוא את הקובץ המפוענח ולהדפיס את תוכנו עלהצג.
פיתרון:
program CODE_FILE; var FILE_IN,FILE_OUT:text; (*הקובץ המוצפן והקובץ המפוענח*) I:integer; (*משתנה הלולאה*) CH:char; (*התו בקובץ המוצפן והמפוענח*) NUM:integer; (*המספר המצפין בקובץ המוצפן*)
procedure INIT; {תת תוכנית לפעולות התחלתיות} begin assign(FILE_IN,'F1'); assign(FILE_OUT,'F2'); reset(FILE_IN); rewrite(FILE_OUT); end;
procedure READ_FROM_FILE; {תת תוכנית לקריאת התו המוצפן והמספר מהקובץ המוצפן} begin (*לקובץ text המאחסן מספר סוגי נתונים נרשום readln*) readln(FILE_IN,CH); readln(FILE_IN,NUM); end;
procedure UNCODE_CHAR; {תת תוכנית לפענוח התו המוצפן} begin CH:=chr(ord(CH)+NUM); end;
procedure WRITE_TO_FILE; {תת תוכנית לרשום התו המפוענח בקובץ הפלט } begin (*לקובץ text המאחסן מספר סוגי נתונים נרשום writeln*) writeln(FILE_OUT,CH); end; procedure PRINT_CHARACTERS; {הדפסת התווים על המסך מהקובץ המפוענח} begin readln(FILE_OUT,CH); write(CH); (*הדפסה למסך*) end;
(**********התוכנית הראשית********)
begin INIT; for I:=1 to 1500 do begin READ_FROM_FILE; (*קרא תו ומספר מצפין*) UNCODE_CHAR; (*פענח*) WRITE_TO_FILE; (*כתוב תו מפוענח לקובץ חדש*) end; (*כעת יש לסגור את הקבצים ולפתוח לשימוש חוזר*) close(FILE_IN); close(FILE_OUT); reset(FILE_OUT); for I:=1 to 1500 do PRINT_CHARACTERS; close(FILE_OUT); end. |
להורדת הדוגמא לחץ כאן
בקובץ מסוג text רצוי להשתמש ב- readln ו- writeln.
בגלל מבנה הקבצים,בקבצים השומרים סוג משתנה אחד בלבד
(כמו integer ,char ,Boolean ,read) נשתמש ב – read ו- write ואילו בקובץ text ,המאחסן סוגים שונים של משתנים,נשתמש ב-readln ו-writeln (למרות שאפשר אחרת).
לעיתים קרובות איננו יודעים כמה נתונים רשומים בקובץ.עלינו לברר בעצמנו מתי מסתיים הקובץ ולסיים את הקריאה מקובץ זה.
לצורך הטיפול בסוגיה זו, הפסקל מאפשר לנו את השימוש בפונקציה
(eof (end of file.
לאחר ביצוע הפונקציה הזו, נקבל את הערך true אם הקובץ הסתיים או false אם לא הסתיים.
לדוגמא:
;(if eof (FILE_IN) then close(FILE_IN
כלומר,אם נקרא התו המסמן את סוף הקובץ והתנאי הוא אמת,בצע סגירת הקובץ בשם FILE_INאחרת המשך להוראה הבאה.