עבור לתוכן

קריאה מקובץ

Featured Replies

פורסם

ב++C אני צריכה לקרוא שורות מסוימות מתוך קובץ לפי בקשת המשתמש.

1. אם המשתמש לוחץ ENTER בCIN (כי הוא רוצה לקרוא מהשורה הראושנה עד האחרונה= לא מכניס קלט מספר) אז המחשב לא ממשיך הלאה בתכנית עד שהוא מכניס קלט. מה אפשר לעשות נגד זה???

2. איך אני קוראת שורות מסוימות איך הפונקציה GETLINE עוזרת לי בזה?

פורסם

GETLINE מאפשרת לך לקלוט עד תו מסויים. במקרה הזה את יכולה לקלוט עד \n(זה נמצא בפרמטר השלישי אם אני לא טועה, והוא אפילו הדיפולטי שלו).

פורסם
  • מחבר

אז אם אני רוצה לקרוא שורות מסוימות אני צריכה לספור N-1 פעמים \n ואז משם להתחיל לקרוא???

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

פורסם

תקראי כם עם GETLINE ותראי אם יש במחרוזת שלך רק \n.

פורסם
  • מחבר
תקראי כם עם GETLINE ותראי אם יש במחרוזת שלך רק \n.

יכול להסביר שוב למה התכוונת?

פורסם
#include <iostream>
#include <fstream>

using namespace std;

int main(void)
{
int num;
char str[101];

cout << "Enter a number (enter for everything):";
cin.getline(str, 100, '\n');
if (str[0]==0)
num = -1;
else
num = atoi(str);
cout << "You entered " << num << endl;
}

פורסם
  • מחבר

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

זה מה שעשיתי: זה פרימיטיבי מדי????



bool ReadTextFile(int choice, int lineBegin, int lineEnd)
{
int moneLine =0;
char ch;

if(choice==1)
{
ifstream file1("cscourse.txt");

cout<<endl;

if(!file1.eof())
{
while(!file1.eof())
{
if(moneLine==lineBegin-1)
{
break;
}

file1.get(ch);
if(ch=='\n')
{
moneLine++;
}
}
while(!file1.eof())
{
file1.get(ch);
if(ch=='\n')
{
moneLine++;
if(moneLine==lineEnd)
{
break;
}
}
cout<<ch;
}
}
}
else
{
ifstream file2("ecocourse.txt");

if(!file2.eof())
{
while(!file2.eof())
{
if(moneLine==lineBegin-1)
{
break;
}

file2.get(ch);
if(ch=='\n')
{
moneLine++;
}
}
while(!file2.eof())
{
file2.get(ch);
if(ch=='\n')
{
moneLine++;
if(moneLine==lineEnd)
{
break;
}
}
cout<<ch;
}
}
}
return true;
}

וגם -איך אפשר שהמשתמש לא יכניס כלום (איזה שורות הוא רוצה לקרוא אם רוצה מהתחלה עד הסוף שילחץ ENTER )???

פורסם

void ReadTextfile(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();
}

לא הרצתי, צריך לבדוק.

פורסם

#include <fstream.h>
#include <stdlib.h>

void ReadTextFile(int choice, int lineBegin, int lineEnd, bool readall)
{
int LineCounter =1;
char buffer[256];
ifstream file;

if(choice==1)
file.open("cscourse.CPP");
else
file.open("ecocourse.txt");

while(!file.eof())
{
file.getline(buffer, 256, '\n');
if( readall || (lineBegin <=LineCounter && LineCounter <= lineEnd))
cout<<buffer<<endl;
LineCounter++;
}
file.close();
}

void main()
{
int lineBegin, lineEnd;
char str[100];
char FileChoice[20];

cout<<"Enter 1 or 2 to select file"<<endl;
cin.getline(FileChoice,20);

cout << "\nEnter line to start reading from (enter for everything):"<<endl;
cin.getline(str,100);// getline(cin,str);//, 100, '\n');

if (str[0]==0) //enter was pressed
ReadTextFile(atoi(FileChoice), 0,0, true);
else
{
lineBegin = atoi(str);
cout << "Enter line to end reading:";
cin>>lineEnd;
ReadTextFile(atoi(FileChoice), lineBegin, lineEnd, false);
}
}

עובד (בדקתי).

פורסם
  • מחבר

אכן עובד.

אבל- מה עשית שם?

פורסם

יש קטע ספציפי שאת שואלת עליו, או על כל הקוד?

פורסם
  • מחבר

זה לא ברור לי:


cin.getline(FileChoice,20);


if (str[0]==0) //enter was pressed
ReadTextFile(atoi(FileChoice), 0,0, true);

וגם


if( readall || (lineBegin <=LineCounter && LineCounter <= lineEnd))
cout<<buffer<<endl;
LineCounter++;

תודה :)

פורסם

1) קולט מחרוזת באורך 20 עד \n.

2) atoi - ascii to int

הופך ממחרוזת למספר.

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

פורסם
  • מחבר

למה אני צריכה לקלוט מחרוזת ארוכה = שם הקובץ שאני רוצה לפתוח???

פורסם

אז ככה:

1) לגבי השורה (cin.getline(FileChoice,20 השתמשתי בפונ' getline כדי לקלוט את מספר הקובץ המבוקש(1 עבור cscourse.CPP ו -2 עבור ecocourse.txt). הערך 20 הוא ערך שרירותי שקבעתי שאומר שאורך מחרוזת הקלט מוגבל למספר באורך 20 ספרות(19 בפועל).

בתכל'ס אפשר לשים 3 וזה מספיק(תו אחד עבור המספר, אחד עבור התו של שורה חדשה ועוד אחד עבור ה-null שיציין סוף מחרוזת). אם תשימי פחות מ-3, אז הפונ' getline השנייה לא תחכה לקלוט ממך כלום אלא תמשיך ישר כאילו הקלדת אנטר (ההסבר לכך בגדול הוא שלחיצת האנטר תחשב כקלט עבור str ולא עבור FileChoice).

אפשר לפשט את זה ע"י השורה

FileChoice= cin.get() שגם ממירה את התו למספר ומונעת את השימוש בפונ' atoi שמבצעת את אותו הדבר.

2)קטע הקוד השני בודק אם לחצת אנטר, אזי המחרוזת שהכנסת ריקה, כלומר התו הראשון בה שווה ל-null, ואז קוראים לפונקציה ReadTextFile עם הדגל שמסמן לקרוא את כל השורות(במקרה כזה הערכים של lineBegin ו- lineEnd לא משנים).

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

זהו, מקווה שהצלחתי להסביר את עצמי טוב, ושיהיה בהצלחה. :)

ארכיון

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

דיונים חדשים