קבצים - התייעצות לגבי אלגוריתם

Ron 417

New member
קבצים - התייעצות לגבי אלגוריתם

אני צריך לרוץ על קובץ שמסודר כך:
OptiSASI opticalConnector 2 16:37 FiberMoti opticalConnector 34 06:29 SHUKIandSons opticalConnector 5 12:05 DavidOptics opticalMediaConverter 8 14:08 OptiSASI attenuator 2 16:37 OptiSASI opticalMediaConverter 2 16:37​
השדות הם: שם לקוח ,שם פריט ,כמות ושעת הזמנה. נדגיש שזהו הקובץ הראשי !!! ישנם קבצים נוספים שאני צריך לפתוח אותם והם מופיעים לפי שם פריט.txt ,למשל: opticalConnector.txt או attenuator.txt וכו'. אני כל פעם צריך לרוץ על הקובץ הראשי ולבצע בדיקות לפי שם הלקוח ,וליצור קובץ פלט ,לפי שם הלקוח. העניין הוא שלקוח יכול להזמין יותר מהזמנה אחת , מה שאומר שאני אצטרך לרשום בקובץ הפלט לפחות הזמנה אחת . אני מנסה לגבש אלגוריתם לגבי :איך לרוץ על הקובץ הראשי ולסרוק כל פעם לקוח אחד ,ועבור אותו לקוח לבדוק את כל "קובץ הפריט". אני אציג את הרעיון שלי ואני מאוד אשמח לפדבקים: לרוץ על הקובץ הראשי ולקחת שורה ראשונה .עבור שורה ראשונה ,לרוץ על כל שאר הקובץ ולחפש שורות נוספות שמכילות את אותו הבנאדם. כמו כן ,להעתיק את שם הבנאדם למערך בשם checked_customers כל שכל פעם שאני אסרוק שורה חדשה {בקובץ הראשי} אני אבדוק ראשית כל אם כבר בוצע פלט עבור אותו לקוח. הבעיה כאן היא שאני רץ על קובץ ,וכאשר אני אסיים לבדוק את השורה הראשונה ואצטרך לעבור לשורה השניה ,יהיה דרוש "להזיז" את סמן הקובץ לשורה השניה {מכיוון שביצעתי כבר פעולות על הקובץ עבור השורה הראשונה}. נראה לי שזה יכול לעבוד אבל בכל מקרה אני מחפש הצעות ייעול. תודה מראש
 

HaifaMan

New member
למה לא לסרוק רק פעם אחת?

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

Ron 417

New member
אתה צודק. אני אעביר את זה לרשימה מקושרת.

תודה!
 

Ron 417

New member
המשך השאלה - עצים בינארים התייעצות

ש לי רשימת קבצים שנראית כך:
ShukiAndSons 0 0 1 FiberMoti 0 1 0 DavidOptics 0 0 0 OptiSASI 1 1 0​
ל קובץ (שבדוגמא הנ''ל הכוונה לכל שורה) מיוצג ע"י: שם לקוח , num3 ,num2 ,num1 . אני צריך להכניס את הקבצים הנ''ל אל תוך עץ ,ולמיין אותם בצורה הבאה: *הלקוח עם ערך num1 הכי גדול ,יופיע ראשון ,לאחר מכן הלקוח עם num2 ,וכמו כן הלקוח עם num3 . *אם יש 2 לקוחות עם אותו ערך num1 ,הם ימויינו לפי שדה ה num2 שלהם . *אם יש 2 לקוחות עם אותו num2 , הם ימוינו לפי שדה ה num3 שלהם. כלומר אני אמור לקבל את הדבר הבא:
OptiSASI 1 1 0 FiberMoti 0 1 0 ShukiAndSons 0 0 1 DavidOptics 0 0 0​
בנוגע ליישום: חשבתי לקחת עץ ולהכניס לתוכו את כל המידע . ללא כל סדר מסוים ,פשוט הכנסת איבר רגילה. לאחר מכן לרוץ על הקובץ ולחפש את המספר הגדול ביותר . לקחת 3 משתנים big1 ,big2 ,big3 ,וכל פעם לבדוק על איבר "האם שדה num1 גדול מ big1" ,אם כן מבצעים החלפה וממשכים לרוץ על העץ. ,אם שווה ,בודקים לפי השדה השני של שניהם ,ואותה פרוצדורה לפי השדה השלישי. שיפורים / הצעות? תודה
 
למעלה