עבור לתוכן

עבודה עם קבצים בשפת C

Featured Replies

פורסם

שלום,

מישהו יכול להסביר לי אולי איך אני יכולה לעבוד עם קבצים בשפת C?

בעיה לדוגמא:

יש לי קובץ טקסט שנותנים לי ואני צריכה לקרוא את הקובץ ולפעול ע"פ מה שרשום בו.

אם לדוגמא האות הראשונה בשורה היא # אני צריכה להתעלם מהשורה הזו.

אם יש בתחילת השורה מספר אז אני צריכה לפעול בהתאם {ע"פ קביעה של מה עושה כל מספר}.

פורסם

הפונקציה ()fgets תחזיר לך שורה-שורה מקובץ לתוך *char, ומשם תוכלי כבר לקרוא תו-תו ולעשות מה שמתחשק לך.

פורסם
  • מחבר

א'- תודה.

את זה שאפשר להשתמש בפונקציה הזו אני יודעת אבל אני לא יודעת איך להשתמש בזה בתוכנה.. מבחינת כתיבה... אני מסתבכת עם היישום.

אתה יכול לתת לי בבקשה דוגמא לשימוש בפונקציה ושימוש כלשהו במצביע CHAR שנוצר?

האם הפוקציה מעתיקה לי את כל הטקסט למחרוזת אחת או כל שורה בנפרד? איך זה עובד?

איך אני מגדירה את הגודל של המחרוזת אליה הטקסט אמור לעבור?

הבנתי שיש איזה פונקציה בשם STRDUP שאמורה להקל על העניינים? איך משתמשים בה?

פורסם
  • מחבר

תודה רבה.

כתוב שהפונקציה קוראת עד ירידת השורה.

אם לדוגמא יש מספר שורות. איך אני יכולה לגרום לו להמשיך לקרוא ולבצע גם את השורה הבאה?[br]פורסם בתאריך: 21.03.2011 בשעה 12:17:39


ושאלה נוספת:

איפה אני צריכה לשמור את הקובץ כדי שכשאני מריצה את התוכנית זה באמת יקרא את הקובץ?

פורסם

אם לדוגמא יש מספר שורות. איך אני יכולה לגרום לו להמשיך לקרוא ולבצע גם את השורה הבאה?

בלולאה, מן הסתם.

איפה אני צריכה לשמור את הקובץ כדי שכשאני מריצה את התוכנית זה באמת יקרא את הקובץ?

בספרייה שממנה התוכנית רצה. לחילופין אפשר לפתוח את הקובץ עם שם מסלול מלא (משהו כמו "c:\\blabla\\file1.txt"). במקרה כזה חשוב לשים \\ בכל מקום שבו מופיע \ בשם המסלול, אחרת C תתייחס לזה כescape code).

פורסם
  • מחבר

תודה רבה רבה!

שאלה נוספת- מסתבר שאני אמורה להשתמש ב-ARGC ARGV

יותר נכון- שהmain שלי צריך לקבל ARGC ARGV... מה זה אומר? איך אני ממירה את מה שמתקבל מהקובת לARGC ARGV?

פורסם

int main(int argc, char *argv[])
{
char* input_file_name = NULL;
char* output_file_name = NULL;

if (argc == 3)
{
/* got two parameters + parameter #0 which is the name of the executable program */
input_file_name = argv[1];
output_file_name = argv[2];

if ( DoSomeWork(input_file_name, output_file_name) != 0 )
return 1; /* some sort of file error maybe */

return 0; /* everything is fine */
}
else return 2; /* not enough parameters */
}

פורסם
  • מחבר

שאלה חדשה:

נגיד אני קולטת מקובץ שורה המכילה כל מיני קריטריונים עם פסיקים ביניהם, לדוגמא: שם ספר, מחבר, שנת הוצאה וכו'... ואני צריכה להזין כל קריטריון למקומות במבנה שהגדרתי... איך אני יכולה לעשות את זה? עם הרבה לולאות FOR.?

פורסם

למה "הרבה" לולאות FOR? פשוט לולאה בתוך לולאה (החיצונית קוראת את השורה מתוך הקובץ, הפנימית מחלקת את השורה לחלקים). כמובן עדיף בכלל להכניס את הלולאה הפנימית לתוך פונקציה נפרדת לחלוטין.

דרך אגב, את יכולה לחלק את המחרוזת לחלקים באמצעות strtok.

פורסם

זהירות בהפעלת strtok על פרמטרים ב-argv ישירות!

עדיף להעתיק אותם קודם עם strdup או משהו אחר.

פורסם

אני מניח ש-argv מכיל רק את שם הקובץ איתו היא צריכה לעבוד, לא את התוכן עצמו.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים