עבור לתוכן

מציאת מילה מתוך קובץ טקסט בC

Featured Replies

פורסם

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

מישהו מוכן לכוון אותי לכיוון הנכון של איך עושים את זה?

פורסם

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

לקרוא קבצים למדת? כי מעבר לזה לא צריך לעשות הרבה.

פורסם
  • מחבר

לקרוא קבצים זה תחילת שנה הבאה P:

פורסם

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

או שפספסתי פה משהו.

פורסם
  • מחבר

זה לא במסגרת הלימודים, זה במסגרת ההעשרה העצמית שלי :jump:

פורסם
  • מחבר

הבנתי שfgets זה מה שאני צריך.

איך בדיוק אני גורם לתוכנה לעבור על כל הקובץ (שמלא במילים, מילה בכל שורה) ולהשוות את הstring שיש לי איפשהו לאותה שורה?

קראתי את זה: http://irc.essex.ac.uk/www.iota-six.co.uk/c/i2_feof_fgets_fread.asp, אבל אני עדיין לא מצליח להבין איך בדיוק זה עובד.

פורסם

מה שהבנתי לפי העמוד הזה, זה שאתה קורא לפונקציה עם 3 ארגומנטים.

1. שם של מערך (מן הסתם כדאי מחרוזת)

2. מספר התוים שאתה רוצה לקרוא בכל שורה בבת אחת

3.המצביע שמכיל את כתובת הקובץ

ברגע שאתה קורא לפונקציה נגיד למערך שנקרא BBB, עם מספר של 10 תוים, נכנס למערך הזה 10 התוים הראשונים שיש בקובץ.

כשתקרא לפונקציה שוב, ייקראו ה 10 הבאים בשורה, וכן הלאה.

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

פורסם
  • מחבר

יש אפשרות לדאוג שהוא ירד שורה במקום להמשיך מאיפה שהוא היה?

פורסם

את האמת, אין לי שמץ. אבל ממש לא נראה לי.

אולי בעזרת פונקציה אחרת שאני לא נתקלתי בה.

פורסם

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

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

cat

dog

banana

אז האם התוכנה צריכה להיות מסוגלת למצוא את הטקסט "nana"?

פורסם
  • מחבר

לא, רק שורה שלמה. (שהיא בעצם מילה שלמה)

פורסם

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

בלי מחרוזות:

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

אם יש התאמה, תמשיך לקרוא.

אם אין התאמה, אז השורה לא מתאימה - אז תמשיך לקרוא ממנה (ותתעלם ממה שאתה קורא) עד שאתה מגיע לתו סוף שורה, על מנת לעבור לשורה הבאה.

אם הגעת לסוף המילה שאתה מחפש, אבל עדיין לא הגעת לסוף השורה בתוך הקובץ זה אומר שהשורה לא מתאימה - אז תעבור שום לשורה הבאה.

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

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

עם מחרוזות:

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

קרא כל פעם שורה לתוך המחרוזת (באמצעות fgets), ואז תשווה בין שתי המחרוזות עם strcmp. אם יש התאמה סבבה, אם לא אז תעבור לשורה הבאה (באמצעות קריאות ל-fgets או באמצעות fgetc כמו קודם), וזהו.

פורסם
  • מחבר

נניח וקראתי לתוך המחזורת temp שלי משהו ועוד נשאר לשורה כמה אותיות, מה הקוד שאני צריך כדי לדלג הלאה?

פורסם

while (fgetc(file) != '\n' && !feof(file));

הלולאה כל פעם קוראת תו, ועוצרת ברגע שמגיעים לסוף שורה או לסוף הקובץ (זה ה-feof).

ארכיון

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

דיונים חדשים