עבור לתוכן

עזרה: חיפוש בקובץ- C++

Featured Replies

פורסם

אוקי, אתה בכיוון הנכון.

שים לב למה שאמרתי: get ו-put מקדמות את המצביע לקובץ ב-1. תחשוב איפה נמצא המצביע לפני שאתה עושה put.

  • תגובות 40
  • צפיות 4k
  • נוצר
  • תגובה אחרונה
פורסם
  • מחבר

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

יש מצב ליותר עזרה?

תודה רבה!

פורסם

אמרתי לך: seekp.

נתתי לך לינק לתיעוד שלה. הנה עוד אחד אפילו:

http://en.cppreference.com/w/cpp/io/basic_ostream/seekp

תחשוב לוגית: אחרי שה-if הצליח, איפה נמצא המצביע של הקובץ? איפה אתה רוצה שהוא ימצא?

עריכה: מסתבר שטעיתי קלות. ל-fstream יש שני מצביעים שלא בהכרח זהים זה לזה - מצביע לקריאה ומצביע לכתיבה. בשביל להזיז את המצביעים משתמשים ב-seekp ו-seekg (ה-p זה לכתיבה וה-g זה לקריאה), ובשביל לדעת מה הערכים שלהם משתמשים ב-tellp ו-tellg.

עכשיו תחשוב איך אתה משתמש בזה.

פורסם
  • מחבר

עקבתי אחרי הפוינטר של ה put, אבל ראיתי שהוא מתקדם כמו ה get. אחי אני יודע שאולי אני משגע אותך, אבל יש מצ באולי ממש תוכל לעזור לי בקוד?אני ממש כבר אבוד... תודה

פורסם

תחשוב לוגית: אחרי שה-if הצליח, איפה נמצא המצביע של הקובץ? איפה אתה רוצה שהוא ימצא?

ליתר דיוק: איפה נמצאים המצביעים של הקריאה והכתיבה, ואיפה אתה רוצה שיהיו?

פורסם
  • מחבר

זה העניין , הם נמצאים בקמום שאני רוצה ( לפי ה tellg ו tellp) אבל משום מה הוא לא עושה לי את ההזנה המבוקשת כמו שצריך...

פורסם

איך אתה יודע שהם נמצאים במקום שאתה רוצה?

באיזה מקום הם נמצאים? באיזה מקום נמצא התו שאתה רוצה לשנות? (שים לב שבמחשבים הספירה מתחילה מ-0, לא מ-1).

מה התוצאה שאתה מקבל?

פורסם
  • מחבר

אני יודע.. חח

עקבתי אחרי שני הפוינטרים ( עשיתי להם cout על המסך לכל אורך לולאת ה while ובדקתי), והם נמצאים באותו מקום..

שאני עושה את ההצבה- זה פשוט לא עושה כלום בקובץ..

אני באמת לא יודע מה לעשות

פורסם

תעלה את הקוד העדכני. אם לא השתמש ב-seekp ו-tellg יש לך טעות.

בכל מקרה, אחרי ה-put גם תוסיף את הקריאה הבאה:

nf.flush();

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

פורסם
  • מחבר


#include<iostream>
#include<string>
#include<fstream>
using namespace std;


int main()
{


fstream nf("lamed.txt");

while(!nf.eof())
{
char x=nf.get();



if(x=='s')
{
nf.seekp(nf.tellg());
nf.put('z');
nf.flush();
}

}
return 0;
}

פורסם

הקוד הזה אמור לשנות את הקובץ (יש בו טעות, אבל הוא כן אמור לשנות את הקובץ). מה התוכן של הקובץ?

פורסם
  • מחבר

בעיקרון זה התוכנית הנסיונית שלי, (התרגיל עצמו הרבה יותר ארוך ומסובך).

סתם יצרי קובץ עם ה הטקסט הבא-

asdasda

qrqwdsa

asd';asd

וזה היה אמור לשנות את כל ה -s ל -z אבל זה לא משנה.

פורסם

אתה בטוח שהקובץ לא פתוח באיזו תוכנה אחרת שנועלת אותו? אולי אתה מסתכל על הקובץ הלא נכון?

כמו שאמרתי, הקוד שלך אמור לשנות את הקובץ, פשוט לא בצורה הנכונה.

פורסם
  • מחבר

מה הכוונה לא בצורה הנכונה?

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

פורסם

כל פעם שאתה עושה get זה מקדם את המצביע ב-1. אחרי שאתה קורא את התו 's' אז המצביע בקובץ יצביע לתו הבא אחרי ה-s, ולא ל-s עצמו.

ארכיון

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

דיונים חדשים