קריאה מקובץ - עמוד 2 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

קריאה מקובץ


נעמה.

Recommended Posts

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

const char *file1="a.txt";
const char *file2="b.txt";

int getNumber(const char *msg, int def)
{
char input[11];
cout << msg;
cin.getline(input, 10, '\n');
if (input[0] == '\0')
return def;
else
return atoi(input);
}

void ReadTextfile(const char *filename, int begin, int end)
{
string input;
ifstream file(filename);
int line = 0;

if (file.is_open())
{
while (!file.eof())
{
getline(file, input);
line++;
if ((begin == -1 || line >= begin) && (end == -1 || line <= end))
{
cout << input << endl;
}
}
}
file.close();
}

int main(void)
{
int fileNum = getNumber("Enter filename number to read (1 = a.txt, 2 = b.txt):", 1);
int begin = getNumber("Enter starting line number (-1 or for start):", -1);
int end = getNumber("Enter ending line number (-1 or for end):",-1);
ReadTextfile((fileNum == 1) ? file1 : file2, begin, end);
return 0;
}

קישור לתוכן
שתף באתרים אחרים

תודה על ההסבר המפורט.

אפשר עוד שאלה(ות):

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

התכנית תעתיק רשומות מהקובץ הבינארי לקובץ בינארי חדש.

1. מה זה אומר שהקבצים בינארים?

2. איך מדפיסים לפי רשומות (כמו שורות בקובץ טקסט?)

3. איך מעתיקים מקובץ לקובץ?

4. אם אני כותבת משהו על המסך ורוצה שהוא ישמר לתוך קובץ. איך אני עושה את זה?

קישור לתוכן
שתף באתרים אחרים

1) הכוונה היא שלא שמורים בקובץ תווים רגילים של אותיות, אלא ערכים שמציינים תבנית מסויימת התוכנית מסויימת אמורה לקרוא. לדוגמא, הWORD יודע לפתוח קבצי DOC. אם תנסי לפתוח אותם עם NOTEPAD, את לא תביני מה רשום שם.

2) קודם את חייבת להכיר את מבנה הרשומה. יש לך אותו?

3) את יכולה להעתיק בייט בייט(או קבוצת בתים כל פעם) ולרשום אותם על הקובץ השני.

4) את זה את יכולה לבצע בצורה טקסטואלית, לא בינארית. כל אות או מחרוזת שאת קולטת מהמסך(ע"י getline) תכתבי לקובץ.

קישור לתוכן
שתף באתרים אחרים

דוגמה, לא הכי יעילה:

#include <iostream>
#include <fstream>

using namespace std;

struct person
{
char first_name[40];
char last_name[40];
int age;
bool isMale;
char additional[40];
};

void writeRecord(const char *name, person &record, bool isNew)
{
ofstream output;
if (isNew)
output.open(name, ios::binary | ios::trunc);
else
output.open(name, ios::binary | ios::out | ios::app);

output.write((char *)&record, sizeof(person));
output.close();
}

person readRecord(const char *name, int record)
{
person tmp;
ifstream input(name, ios::binary);
int cnt = 0;
while(input.read((char *)&tmp, sizeof(person)) && cnt != record)
cnt++;
if (cnt != record)
throw "no such record";
input.close();
return tmp;
}

int main(void)
{
person a;

strcpy(a.first_name, "alon");
strcpy(a.last_name, "mizrachi");
a.age = 6;
a.isMale = true;
strcpy(a.additional, "?");

writeRecord("data", a, true);

strcpy(a.first_name, "another");
strcpy(a.last_name, "one");
a.age = 1;
a.isMale = false;
strcpy(a.additional, "bites the dust");

writeRecord("data", a, false);

person b = readRecord("data",0);
printf("%s\n", b.first_name);

return 0;
}

קישור לתוכן
שתף באתרים אחרים

אין לי את מבנה הרשומה. איך אני אמורה להכיר אותו אם אני לא יכולה לקרוא קובץ בינארי?

מצורפים הקבצים הבינארים מהם אני צריכה לקרוא.

את יכולה להעתיק בייט בייט(או קבוצת בתים כל פעם) ולרשום אותם על הקובץ השני.

איך עושים את זה? אילו פונקציות כותבות לתוך קובץ?

הקבצים:

[attachment deleted by admin]

קישור לתוכן
שתף באתרים אחרים

1) לגבי השאלה כיצד כותבים לקובץ, הפונקציה הינה write.

דוגמא (כפי שמופיעה בדוגמא האחרונה של Omniscience) :

output.write((char *)&record, sizeof(person));

2)לגבי שאלת ההעתקה מקובץ (להלן sourcefile ) לקובץ(להלן destinationfile):

דוגמא ע"י שימוש בפונ' writeRecord ו- readRecord מהדוגמא של Omniscience:

person b = readRecord("sourcefile",0); //read the first record from sourcefile 
writeRecord("destinationfile", b, true);//copy the record to the destinationfile

3)לגבי ההעתקה של פלט של המסך לקובץ:

מכיון שאת מדפיסה למסך משתנה כלשהו (יכול להיות רשומה, יכול להיות גם סתם טיפוס פשוט, כמו מספר שלם), אזי את יכולה לנתב את ערכו של אותו משתנה לכל אמצעי פלט שאת רוצה כגון קובץ, ואת זה את עושה ע"י השימוש בפונ' write הנ"ל.

אם נשתמש בדוגמא מסעיף 2 אז את הרשומה b (מטיפוס person) יכולת להדפיס למסך(ע"י הדפסת כל השדות המרכיבים אותה), ולשמור אותה לקובץ, בדיוק כמו בדוגמא.

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...