01-09-2007, 19:44
|
|
|
חבר מתאריך: 30.07.05
הודעות: 949
|
|
עבודה עם קבצים ב-++C שונה במידה מה מזו של C...
הגישה של ++C לתכנות היא שונה מלחתחילה, ובין אם אתה עובד עם קובץ או עם קלט - הגישה זהה למדי ומתייחסת לאובייקט stream.
לעבודה עם קבצים אני ממליץ על הספריות:
<fstream>, <iostream>, <iterator>
ולהוסיף מיד להתחלה:
קוד:
using std::cin;
using std::cout;
using std::endl;
using std::ifstream;
using std::ofstream;
using std::istream_iterator;
using std::ostream_iterator;
כעת יש 2 גישות עקרוניות לעבודה:
1) איטרטורים על ה-stream
2) אופרטורי קלט\פלט.
נתחיל עם איטרטור, זה די פשוט.
בסופו של דבר מהרגע שהגדרת לך איטרטור אתה מסתכל על הקובץ כאילו הוא אוסף של עצמים מסוג מסויים: string, int, double, char או עוד טיפוסים כאלו ואחרים שיודעים לעבוד עם האופרטורים הללו.
אתה מאתחל לך איטרטור לתחילת הקובץ ומאז עובד איתו כאילו היה פויינטר לסוג המסויים:
קוד:
ifstream file(FileName);
istream_iterator<double> step(file);
istream_iterator<double> eof; //Since not initilized, points to EOF
double x=*step++; // x is now set to the first double element in the file and step will advance to the next.
while (step != eof) {
x+=*step++;
}
cout<<"The sum of the file is: " << x << endl;
זה שימוש פשוט של איטרטור ע"מ לעבור על קובץ. כמובן שאיטרטור אפשר ליצור גם עבור string או char, תלוי בצורך שלך...
היתרון בשיטה הזו הוא שהיא קודם כל מאד פשוטה ואינטואיטיבית, בנוסף אנומליות בקובץ לא יגרמו לך לצרות מיותרות.
עכשיו הצורה הפשוטה יותר לעבודה, אבל זה יכריח אותך להכיר היטב את המבנה של הקובץ:
שימוש באופטרטורים >> <<
קוד:
ifstream file(FileName);
ofstream file2(FileName2);
char c(0); //would work with anything, stings and numbers too
while (c != //sorry, dont remmember :-( ) {
file >> c; //Read a char from the first file
file2 << c; //Write the read char to the 2nd file
}
עכשיו, בקשר לבעיה שלך עם קובץ INI, אז יש פה כמה אפשרויות. לדוגמא:
קוד:
function ReadInI(char* fINI) {
ifstream ini(fINI);
char eq('=');
string strBuff(""); //Will be used for generic purposes.
ini >> strBuff; //The INI file should begin with [Dir]
/*
Validate Format and Do something with the directory name...
*/
ini >> strBuff;
while (strBuff != EOF) {
/*
Do something with the parameter name
*/
ini >> eq;
if (eq != '=') throw("Wrong Format");
ini >> strBuff;
if (strBuff == EOF) throw("Wrong Format");
/*
Do something with the Param Value
*/
ini >> strBuff;
}
}
רק שים לב שצריך להגדיר מה זה EOF, כי אני לא זוכר
זהו, עד כאן נסיוני הדל בעבודה עם קבצים ב-++C. מקווה שעזרתי
_____________________________________
חתימתכם הוסרה כיוון שלא עמדה בחוקי האתר. לפרטים נוספים לחצו כאן. תוכלו לקבל עזרה להתאמת החתימה לחוקים בפורום חתימות וצלמיות.
נערך לאחרונה ע"י Dark Knight בתאריך 01-09-2007 בשעה 19:49.
|