Download presentation
Presentation is loading. Please wait.
2
1 עבודה עם קבצי טקסט סוגי קבצים קובץ טקסט קובץ בינארי פתיחה וסגירה של קובץ פונקציות לקריאה ולכתיבת תו פונקציות לקריאה ולכתיבת שורה פונקציות לקריאה לכתיבה מובנית
3
2 שימוש בקבצים ששימוש בקבצים מאפשר לנו לשמור נתונים ע”ג התקני אחסון חיצוניים ובעיקר ע”ג הדיסק הקשיח. ששימוש בקבצים מאפשר לשמור כמות גדולה של נתונים, מעבר לקיבולת הזיכרון, ולשמור את הנתונים גם כאשר המחשב כבוי. עעל מנת שהנתונים יהיו נגישים עלינו לשמור אותם בסדר הגיוני. ככל נתון ישמר בשדה. לדוגמא שם פרטי. ככל השדות המתייחסים לאותו פריט ישמרו באותה רשומה. לדוגמא רשומת סטודנט. ררשומות המתייחסות לאותו נושא ישמרו באותו קובץ. לדוגמא הסטודנטים רפואה שנה א (נתוני כל סטודנט ישמרו ברשומה נפרדת קקבצים בעלי קשר ישמרו באותה תיקיה. לדוגמא כל קבצי התלמידים
4
3 המבנה FILE ההמבנה מוגדר בקובץ stdio.hומכיל מידע אודות קובץ. המבנה הוא : typedef struct { shortevel; unsignedflags; charfd; מספר הזיהוי של הקובץ במערכת ההפעלה unsigned charhold; shortbsize; unsigned char*buffer, *curp;החוצץ דרכו נעשית הפעולה ומצביע למיקום הנוכחי בקובץ unsignedistemp; sorttoken; }FILE;על מנת שנוכל לפנות לקובץ עלינו להגדיר משתנה מסוג זה
5
4 פתיחת קובץ fopen ללפני התחלת השימוש בקובץ, לכל מטרה שהיא, חייבים לפתוח את הקובץ. הפתיחה עושה את הקובץ לזמין. הפונקציה כלולה בספריה stdio.h. ההאבטיפוס של הפונקציה לפתיחת קובץ : FILE *fopen(const char *filename, const char *mode); ככלומר הפונקציה מחזירה מצביע לטיפוס FILE,שהוא מבנה אשר מוצהר עליו ב-stdio.h.בשדות השונים של הטיפוס נעשה שימוש ע”י פונקציות שונות המתייחסות לקבצים. קריאה לפונקציה יוצרת מופע של המבנה ומחזירה מצביע למבנה זה. תתבנית הפונקציה : FOPEN(file_path, mode);
6
5 פתיחת קובץ - fopen - המשך ההסבר התבנית : ההפונקציה מחזירה מצביע לנתון מסוג FILE.אם הפונקציה נכשלת בפתיחת הקובץ, מוחזר הערך NULL. ההארגומנט filepathהוא שם הקובץ שרוצים לפתוח, כולל המסלול. אפשר לכתוב מחרוזת כלואה בין גרשיים או מצביע למחרוזת המאוחסנת בזיכרון. שם הקובץ נקבע בהתאם לכללי מערכת ההפעלה ההארגומנט Modeמציין את סוג הגישה לקובץ (טקסט או בינארי) ואת האופן שבו רוצים לפתחו את הקובץ (קריאה, כתיבה או קריאה וגם כתיבה). עעל מנת לפנות לקובץ עלינו להגדיר משתנה מסוג FILE,לדוגמא FILE *fp;
7
6 דדוגמא לשימוש בפונקציה לפתיחת קובץ : fopen (“C:\MyBooks\Autoexec.bat”, “r”); ההכונן הוא Cהתיקייה היא MyBooksושם הקובץ הוא Autoexec.bat ההקובץ נפתח למטרת קריאה (r).אפשר לפתוח קובץ כקובץ קלט (Input)או כקובץ פלט (Output)או כקובץ קלט ופלט (Append). אאני מעדיף לבצע את אותה פעולה בדרך הבאה : char file_name [] = “C:\MyBooks\Autoexec.bat”; char mode[] = “r”; fopen(file_name, mode);
8
7 הערכים שהארגומנט mode יכול לקבל rr -לפתיחת קובץ טקסט לקריאה. אם הקובץ לא קיים מוחזר הערך null ww -לפתיחת קובץ טקסט לכתיבה. אם הקובץ לא קיים, הוא נוצר, אם הקובץ קיים הוא נדרס. aa -לפתיחת קובץ טקסט להוספה (Append).אם הקובץ לא קיים, הוא נוצר. אם הקובץ קיים יתווספו הנתונים בסוף הקובץ. rrb-לפתיחת קובץ בינארילקריאה. אם הקובץ לא קיים מוחזר הערך null wwb -לפתיחת קובץ בינארי לכתיבה. אם הקובץ לא קיים, הוא נוצר, אם הקובץ קיים הוא נדרס. aab -פתיחת קובץ בינארי להוספה. כמו “a”/ ++r -פתיחת קובץ טקסט לקריאה ולכתיבה, השאר כמו r. ++w -פתיחת קובץ טקסט לקריאה ולכתיבה, השאר כמו w.
9
8 הערכים שהארגומנט mode יכול לקבל - המשך ++a -פתיחת קובץ טקסט לקריאה ולהוספה, השאר כמו a. ++rb -פתיחת קובץ בינארי לקריאה ולכתיבה, השאר כמו rb ++wb -פתיחת קובץ בינארי לקריאה ולכתיבה, השאר כמו wb ++ab -פתיחת קובץ בינארי לקריאה ולהוספה, השאר כמו ab
10
9 דוגמאות לשגיאות בעת פתיחת קובץ ההתייחסות לשם קובץ שאינו קיים בהוראת קריאה מהקובץ נניסיון לפתוח קובץ כאשר הכונן אינו מוכן (לדוגמא דלת פתוחה). נניסיון לפתוח קובץ כאשר התיקייה או הכונן אינם קיימים. נניסיון לפתוח קובץ מסוג שגוי, לדוגמא ניסיון לפתוח קובץ בינארי בתור קובץ טקסט. נניסיון לפתוח קובץ לכתיבה כאשר התקליטון מוגן. אאין למשתמש הרשאה לפתיחת הקובץ ברשת.
11
10 בדיקת הצלחה או כישלון בפתיחת קובץ ההפונקציה () fopenמחזירה ערך המציין אם פתיחת הקובץ הצליחה או נכשלה. עלינו לבדוק את הערך המוחזר. אאם פתיחת הקובץ נכשלה מוחזר הערך NULL. אאם פתיחת הקובץ הצליחה מוחזר הערך 1. דדוגמא לבדיקת הצלחת פתיחת הקובץ : fp_input = fopen(input_file_name, “rt”); if (fp_input == NULL) { fprintf(stderr, “Error during opening the file”); exit(1); }
12
11 סגירת קובץ fclose ללאחר סיום השימוש בקובץ, חייבים לסגור את הקובץ. הסגירה עושה את הקובץ ללא זמין. הפונקציה כלולה בספריה stdio.h. ההאבטיפוס של הפונקציה לסגירת קובץ : FILE *fclose(const char *filename); ככלומר הפונקציה מחזירה מצביע לטיפוס FILE,שהוא מבנה אשר מוצהר עליו ב-stdio.h.תבנית הפונקציה לסגירת קובץ : FCLOSE (FILE *fp); דדוגמא לשימוש בפונקציה לסגירת קובץ : fclose (fp); ההפונקציה מחזירה EOFאם סגירת הקובץ נכשלה.
13
12 קובץ טקסט Text file קקובץ זה הנוצר ע”י שפת Cיכול להיקרא ע”י כל תוכנה המסוגלת לקרוא קובץ טקסט. ההקובץ הוא למעשה רצף של שורות המופרדות ע”י התווים r\ו-n\ (סוף שורה ושורה חדשה). האורך המרבי של שורה הוא 255 תווים ההשורה מסתיימת בתו אחד או יותר המאותתים על “סוף שורה” בקובץ על דיסק וזאת בהתאם למערכת ההפעלה. במערכות הפעלה Dosו-Windowsתו “סוף שורה” הוא שילוב של CR-LF,כלומר r\ + n\. בבכתיבת מחרוזת לקובץ טקסט, מוחלף התו ‘0\’ מסוף המחרוזת בתו “סוף שורה”. בקריאה מקובץ טקסט מוסף התו ‘0\’ בסוף המחרוזת. בבכתיבה לקובץ מוחלף התו שורה חדשה ‘n\’בתו “סוף שורה”. בבקריאה מקובץ מוחלף התו “סוף שורה” לתו ‘n\’.
14
13 פונקציה לכתיבת תו () Fputc ההפונקציה כותבת תו אחד לקובץ ש-fpמצביע עליו. לאחר הכתיבה יקודם סמן הקובץ למיקום הבא. הפונקציה כלולה בספריה stdio.h. ההאבטיפוס של הפונקציה לכתיבת תו לקובץ : FILE *fputc(int ch, FILE *fp); ככלומר הפונקציה מחזירה מצביע לטיפוס FILE,שהוא מבנה אשר מוצהר עליו ב-stdio.h. תתבנית הפונקציה : FPUTC(variable_name, FILE *fp); דדוגמא לשימוש בפונקציה לכתיבת תו לקובץ: fputc(msg[I], fp); אאם הכתיבה נכשלת או שמגיעים לסוף הקובץ, תחזיר הפונקציה EOF
15
14 פונקציה לקריאת תו Fgetc() ההפונקציה ניגשת לקובץ ש-fpמצביע עליו וקוראת תו אחד ומחזירה אותו. לאחר הקריאה יקודם סמן הקובץ לתו הבא. ההאבטיפוס של הפונקציה לקריאת תו מקובץ : FILE *fgetc(FILE *); ככלומר הפונקציה מחזירה מצביע לטיפוס FILE,שהוא מבנה אשר מוצהר עליו ב-stdio.h. תתבנית הפונקציה : fgetc(FILE *fp); דדוגמא לשימוש בפונקציה לקריאת תו מקובץ : msg[I] = fgetc(fp); אאם הקריאה נכשלת או שמגיעים לסוף הקובץ, תחזיר הפונקציה EOF.
16
15 פונקציה לכתיבת שורה () fputs ההפונקציה כותבת לקובץ את המחרוזת שבמשתנה (line)ללא NULLמסיים. ההפונקציה איננה מוסיפה n, CR \או LFבסוף השורה. ההפונקציה מחזירה EOFאם נכשלה או את התו האחרון אם הצליחה ההאבטיפוס של הפונקציה לכתיבת שורה לקובץ : int fputs(const char *, FILE *); תתבנית הפונקציה : intFPUTS(char *line, FILE *fp); דדוגמא לשימוש בפונקציה לכתיבת שורה לקובץ : FILE *fp=fopen(“data.txt”, “wt”); fputs (f_name, fp);
17
16 פונקציה לקליטת מחרוזת (שורה) fgets ההפונקציה דומה לפונקציה ()getsבכך שהיא קוראת שורת טקסט מ- streamשל קלט. המתכנת יכול להגדיר את שם ה-streamהרצוי ואת מספר התווים המרבי שיקראו. ההפונקציה ניגשת לקובץ במקום ש-fpמצביע עליו וקוראת עד ל-Max (פחות 1) תווים או עד לסוף שורה (n, CR, LF\).הנתונים מאוחסנים במשתנה (line)כולל NULLמסיים. הקריאה לתוך מערך מסוג char. ההאבטיפוס : ;(char * fgets(char *str, int n, FILE *fp תבנית הפונקציה : char * fgets (char *line, int Max, FILE *fp); דוגמא לשימוש בפונקציה : ;(FILE *fp=fopen(“data.txt”, “rt” char buffer[100]; while(fgets(buffer, 100,fp)); ההקריאה מתבצעת ל-bufferעד סוף הקובץ. במקרה של שגיאה או סוף הקובץ, תחזיר הפונקציה NULL.
18
17 פונקציה לכתיבת פלט מובנה fprintf ההפונקציה כותבת לקובץ את כל מה שהוגדר במחרוזת הבקרה, כאשר תווי הבקרה המוגדרים בתו % מאפשרים לשלוט באופן כתיבת הנתונים. תבנית הפונקציה : int FPRINTF(FILE *fp, “מחרוזת בקרה”, var1…) דדוגמא : fprintf (fp, “\n%10d %8.2F %25s” a, b, c); יישנם 3 משתנים ולכן גם 3 תווי המרה. ההכתיבה מתבצעת משמאל לימין. למשתנה aמוקצים 10 תווים + רווח. למשתנה bמוקצים 8 תווים מתוכם 2 לאחר הנקודה העשרונית + רווח. למשתנה cמוקצים 25 תווים והוא יכתב כמחרוזת. השורה מסתיימת בתו שורה חדשה (n\). אאם הפונקציה מצליחה - יוחזר מספר התווים שנכתבו. אם הפונקציה נכשלה - יוחזר EOF.
19
18 פונקציה לקריאה קלט מובנה fscanf ההפונקציה () fscanfמשמשת לקריאת קלט מובנה מקובץ לתוך משתנים. תתבנית הפונקציה : int FSCANF(FILE *fp, “מחרוזת בקרה”, &var1…) ההפונקציה תחזיר את מספר הנתונים שנקלטו, הומרו ואוחסנו בהצלחה. אם הפונקציה נכשלת היא תחזיר EOF.
20
19 איתור סוף קובץ EOF ססוף קובץ אפשר לאתר בדרכים הבאות : ללבדוק אם התו התורן שנקרא הוא התו EOF.עלולה להיות בעיה בקבצים בינאריים כיוון שהתו EOFערכו הוא 1- והוא יכול להופיע באמצע הקובץ. דוגמא לשימוש : while ((c=fgetc(fp)!=EOF) { אפשר להמשיך לקרוא ולעבד את הקובץ } בבאמצעות הפונקציה () feof,אשר מחזירה 0 אם לא הגענו לסוף הקובץ או ערך שונה מ-0 אם הגענו לסוף הקובץ. תבנית הפונקציה : int feof(FILE *fp);
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.