עבור לתוכן

עזרה בתרגיל עם קובץ חיצוני ב-VB 10

Featured Replies

פורסם

שלום,

רציתי לדעת,

יש לי טופס MDI ושני טפסי בניו.

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

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

יש לי שתי שאלות,

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

2) איך אני רושמת את הקוד שייחשב לי את הממוצע של הטמפ' ובמידה ומחקתי את אחד הנתונים הוא ייחשב לי את הממוצע החדש.

אשמח לעזרה :)

ותודה מראש.

פורסם

אני אנסה לעזור למרות שהניסוח שלך די מעורפל

1 - את יכולה לעצב את הפלט בכל צורה שתרצי. אם לדוגמא אם זורקת את הנתונים לשדה text פשוט תעשי concatenation לשתי התוצאות. (תמירי אותן לטקסט קודם כמובן)

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

פורסם
  • מחבר

היי

קודם כל,תודה.

דבר שני,

אני אסביר את הטופס בן הראשון:

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

כשאני בוחרת תאריך ואז כותבת טמפ' ואז שומרת , אני יכולה לחזור על אותה פעולה כמה פעמים שאני מעוניינת.

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

בטופס בן השני יש לי: 2 ליסט בוקס (1- רשימה של התאריכים שנקראים מתוך הקובץ החיצוני. 2- רשימה של הטמפ' שנקלטים מהקובץ החיצוני) ולייבל.

כשאני לוחצת על הלחצן שמעביר אותי לטופס בן השני,

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

בקובץ החיצוני, הוא שומר לי את הנתונים בסדר הבא:

טמפ'

תאריך

טמפ'

תאריך

וכו' ...

פורסם

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

תעתיקי ותדביקי את הקוד בתגית הזו code.gif

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

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

הלייבל שמראה ממוצע הוא פשוט

לולאה שרצה מתחילת הליסט עד סופה, תוסיף את המספר למשתנה אוגר מסויים.

בסוף הלולאה תחלקי את האוגר הזה במספר האיברים שיש בליסט.

פורסם
  • מחבר

Private Sub CmdSaveDATA_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdSaveDATA.Click
Dim path1 As String = "C:\temp\tempdata.txt" 'exists
Dim fwrite As New FileStream(path1, FileMode.Append)

Dim file2 As New StreamWriter(fwrite)

file2.WriteLine(txtTemp.Text)
file2.WriteLine(TxtDAY.Text)

file2.Flush()
file2.Close()
fwrite.Close()



Dim fread As New FileStream(path1, FileMode.Open)

Dim file3 As New StreamReader(fread)
FrmOUTPUT.LstTemp.Items.Add(file3.ReadLine)
FrmOUTPUT.LstDates.Items.Add(file3.ReadLine)

file3.ReadLine()
file3.Close()
fread.Close()




If IsNumeric(txtTemp.Text) = False Then
MsgBox("Input Numbers please", MsgBoxStyle.Exclamation) 'בדיקה האם הנתונים שהוקלדו הם מספרים. אם הנתונים אינם מספרים נפתחת הודעה שנא לשים מספרים.
End If

פורסם

קודם כל, מה עושה הפונקציה Flush()?

דבר שני, את מתייחסת לשלושה קבצים שונים

tempdata.txt

txtTemp.Text

TxtDAY.Text

מעבר לעובדה שהסיומת של השניים האחרונים צריכה להיות txt - למה יש לך שלושה קבצים?

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

אלא אם פספסתי משהו, את מושכת את הנתונים מקובץ tempdata.txt אבל שומרת אותם בשניים האחרים.. :nixweiss:

את הבדיקה האם הוזן מספר עושים לפני ששומרים את הנתונים בקובץ.

תהפכי את הקוד למשהו כזה

 Private Sub CmdSaveDATA_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdSaveDATA.Click

If IsNumeric(textboxDailyTemp) Then
שמירה של המידע בקובץ
else
הודעה על שגיאה
End If

פורסם
  • מחבר

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

אני עכשיו לא יודעת איך מחשבים ממוצע ?

ובמידה ומחקתי מס' מסויים הוא אמור לחשב לי ממוצע חדש.

תודה רבה על העזרה !!!!!!! :yelclap:

פורסם

זה תלוי איך את מוחקת מספר מהרשימה.

אני מניח שיש לך כפתור שמוחק את הטמפ שהיא selected

פשוט תוסיפו לקוד שלו קריאה לפונציה שמחשבת את הממוצע.

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

בסוף (לאחר) הלולאה תחלקי את XY במספר האיברים שיש בליסט וקיבלת את הממוצע.

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

פורסם
  • מחבר

יש אפשרות שתרשום לי דוגמא לקוד? או שתפנה אותי לאתר כלשהו שמראה את הקוד? ... אני אשמח מאוד.

:xyxthumbs::kopfpatsch: ;D

פורסם

לא מותקן לי Visual studio אז לא, אבל איזה חלק מההגיון של הקוד מסבך אותך?

פורסם
  • מחבר

את האמת ....? ... הכל.

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

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

פורסם

אני הייתי עושה משהו כזה:


class ListObserver:
sum = 0
count = 0
function NotifyAdd(date, text, temp):
list1.Items.Add(data.ToString() + " : " + text + " (" + temp.ToString + ")")
sum += temp
count ++

UpdateTemp()


function NotifyRemove(temp):
sum -= temp
count --

private function UpdateTemp()
average_label.Text = (sum / count).ToString()


class FileObserver:
file_object = open("file_path", "wt")

function NotifyAdd(date, text, temp):
file_object.write(data.ToString() + " : " + text + " (" + temp.ToString + ")")

function NotifyRemove(temp):
' Do nothing

class MainWindow:
observers = List()

function constructor():
observers.add(ListObserver())
observers.add(FileObserver())

function OnAddPressEvent():
foreach observer in observers:
observer.NotifyAdd(calendar.DateTime, textbox1.Text, int(tempbox.Text))

function OnRemovePressEvent():
foreach observer in observers:
observer.NotifyRemove(int(tempbox.Text))

יש 2 אובייקטים שיודעים לקבל "עדכון מצב" על הפעולות שהמשתמש מבצע, ויש אובייקט אחד ששולח את הפעולות שהמשתמש עושה.

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

כנ"ל עבור ההסרה - את מכניסה בטופס הראשון את הטמפרטורה שאת רוצה להסיר, והEVENT כבר שולח את העדכון לכל האובייקטים (ושוב, כל אחד מהם עושה את הלוגיקה הספציפית שלו, אם הוא רוצה לעשות בכלל משהו).

פורסם
  • מחבר

איפה אני שמה את כל

class ListObserver

class FileObserver

class MainWindow

בטופס יש לי ליסט בוקס שנכנסים מקובץ חיצוני הטמפרטורות לפי הסדר

ויש לי לייבל ליד.......

בלייבל אני רוצה להראות את הממוצע של הטמפ' שמופעיות בליסט בוקס.

את כל הקוד שרשמת אני רושמת על הלחצן שיבצע הכל ? ... :s05:

ותודה :)

פורסם

כל class כזה אמור להיות בסופו של דבר FORM.

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

ארכיון

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

דיונים חדשים