שליפת מילים מ- TEXTBOX

שליפת מילים מ- TEXTBOX

איך אני שולף מטקסט בוקס מילים ,מילה אחרי מילה לא כולל רווחים? אני מנסה עם TRIM LEFT ו MID ולא הולך לי:( מישהו יכול לתת לי הדגמה קטנה? תודה...
 
אני רוצה להכניס את זה ל...

לתוך מערך סטרינגים ,מילה אחרי מילה ז"א להתחיל מהמילה הראשונה עד הסוף
 
הבעיה היא

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

big_foot

New member
תנסה

For i = 1 To lenlen If Mid(FileData, i, 1) = " " Then Word = Mid(FileData, 1, i) FileData = Mid(FileData, i) i = 1 Word = Trim(Word) Word = LCase(Word) If Word = "" Then GoTo endi If Mid(Word, Len(Word), 1) = "." Then Word = Mid(Word, 1, Len(Word) - 1) If Mid(Word, Len(Word), 1) = "," Then Word = Mid(Word, 1, Len(Word) - 1) Call StopList If Len(Word) > 1 Then ListLen = List1.ListCount List1.AddItem (Word) For ListCounter = 0 To ListLen - 1 If List1.List(ListCounter) = List1.List(ListCounter + 1) Then List1.RemoveItem (ListCounter) End If Next ListCounter End If End If Next i endi:
 

cald

New member
הסתבכתם כאן, הנה פתרון

תוכנה שמפרקת משפט למימלים בודדות אפשר לעשות בכמה דרכים, והדרך שבה אני משתמש, הא לא על ידי Split. אני בונה לבד את כל החלק הזה, בעזרת שתי פונקציות: Instr ו $Mid. אני לא אתחיל להסביר לך נה עושה כל אחת, ואיך הכל עובד, פשוט אני אביא בשבילך את הקוד עצמו. הקוד בנוי בהנכה שלאובייקט ה TextBox קוראים Text1. והנה הקוד: את הקטע הבא יש לרשום ב Declerations: Dim Words(100) As String Dim WRD As Integer את הקטע הבא יש לרשום כשרוצים להפוך את המשפט למילים בודדדות: For i = 1 To 100 Words(i) = Empty Next WRD = 0 fw = 1 Do a = InStr(fw, Text1.Text, " ") If a = 0 Then Words(WRD + 1) = Mid$(Text1.Text, fw, Len(Text1.Text)): WRD = WRD + 1: Exit Do WRD = WRD + 1 Words(WRD) = Mid$(Text1, fw, a - fw) fw = a + 1 Loop - - - הקוד שכתוב כאן אומנם נראה קצת מבולבל, אבל כשתעתיק אותו ל VB הכל יסתדר. מה בעצם אתה מקבל בסוף? מערך מסוג מחרוזת בשם Words, הכולל בכל תא מילה נפרדת. ומשתנה בשם WRD, אשר כולל את מספר המילים שבמערך. * הכנסת המילים למערך היא מ 1 ל 100, ולא מ 0 ל 100, כך שהמילה הראשונה נמצאת ב 1 ולא ב 0. שימוש לדוגמה במערך לאחר שחולק המשפט: for i=1 to WRD (msgbox Words(i next תוכנה כזאת לדוגמה, תוציא ב MsgBox את כל מילה מילה מתוך המשפט. מקווה שהבנת את השימוש בקוד, ואם לא, רק תכתוב
 

eliranh

New member
זה באג שיש בגירסא הלא חוקית...

בניתי פונקציה שמחליפה את הsplit אבל גם בה יש באג קטן לדוגמא אתה רוצה לעשות ככה fot i = 1 to 3 find("visul basic man",i)1 האחד סתם שיהיה ישר next i אז זה לא עובד חייב לעשות find("visual basic man", i - 0)1 אבל זה עובד חלק
 

cald

New member
לא היבנתי בדיוק למה הכוונה

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

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

cald

New member
אתה בתוך שעשית הכל נכון?

הקוד שכתבתי אמור לפעול הלי רווחים כשהעתקתי ל VB את הקטעים של הקוד מתוך ההודעה "הסתבכתם כאן, הנה פתרון", ואז רשמתי ב Text1: i am cald ואחרי שהפרדתי עם הקוד את Text1 למילים בודדות, רשמתי קוד כזה: for i=1 to WRD "´"+(msgbox "´"+Words(i next התוצאה שקיבלתי היתה: תיבת הודעה: ´i´ תיבת הודעה ´am´ תיבת הודעה ´cald´ מה שאומר שהתוכנה הפרידה את המילים ללא רווחים. האם אתה בתוך שהעתקת את הקוד מתוך "הסתבכתם כאן, הנה פתרון" בצורה נכונה, ומקומות הנכונים? אם כן, אז זה מוזר מאד, בכל מקרה, הנה דוגמה של קוד מלא לתוכנה שבניתי, אשר צריכה לקלול CommandButton בשם Command1, ו TextBox בשם Text1. - - - Dim Words(100) As String Dim WRD As Integer Private Sub Command1_Click() For i = 1 To 100 Words(i) = Empty Next WRD = 0 fw = 1 Do a = InStr(fw, Text1.Text, " ") If a = 0 Then Words(WRD + 1) = Mid$(Text1.Text, fw, Len(Text1.Text)): WRD = WRD + 1: Exit Do WRD = WRD + 1 Words(WRD) = Mid$(Text1, fw, a - fw) fw = a + 1 Loop For i = 1 To WRD MsgBox "´" + Words(i) + "´" Next End Sub - - - נזה להעתיק את הקוד הזה ל VB, ובדוק האם אתה מקבל תוצאה זהה לשלי, אם כן, זאת אומרת שהתוכנה אכן הפרידה את המשפט ללא רווחים.
 
לא הבנתי מה זה ....

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

cald

New member
אני עובד על זה, ובינתיים...

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

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

cald

New member
אוקי, זה מוכן

אכן, צדקת בקשר לבעיית הרווחים, אשר לא חשבתי עליה באף תוכנה שבה השתמשתי בקטע הקוד שבניתי להפרדת מילים, כך יוצא שגם אתה עזרת לי. בניתי פונקציה בשם ClearSpaces, אשר פשוט מנקה את הרווחים מהמערך, ושמה את המילים אחת אחרי השניה. וזו הפונקציה (סברוטינה, יותר הכון): - - - Sub ClearSpaces() Dim Temp(100) As String, TempWRD For i = 1 To WRD If Words(i) <> "" And Words(i) <> " " Then TempWRD = TempWRD + 1 Temp(TempWRD) = Words(i) End If Next For i = 1 To 100 Words(i) = Empty Next For i = 1 To TempWRD Words(i) = Temp(i) Next WRD = TempWRD End Sub - - - העתק את קטע הקוד הנ"ל לתוך התוכנית שלך, ויש לך את הפונקציה ClearSpaces ועכשיו, אופן השימו בפונקציה. באירוע שבו מופרד ה TextBox למילים בודדות, לאחר קטע הקוד המפריד את המילים, עליך להוסיף את השורה: ClearSpaces וזהו, הרווחים נעלמו. ושוב, דוגמה של קוד מלא, הדורש שיהיו ב Form CommandButton, בשם Command1 TextBox, בשם Text1 והנה הקוד: - - - Dim Words(100) As String Dim WRD As Integer Private Sub Command1_Click() For i = 1 To 100 Words(i) = Empty Next WRD = 0 fw = 1 Do a = InStr(fw, Text1.Text, " ") If a = 0 Then Words(WRD + 1) = Mid$(Text1.Text, fw, Len(Text1.Text)): WRD = WRD + 1: Exit Do WRD = WRD + 1 Words(WRD) = Mid$(Text1, fw, a - fw) fw = a + 1 Loop ClearSpaces For i = 1 To WRD MsgBox "´" + Words(i) + "´" Next End Sub Sub ClearSpaces() Dim Temp(100) As String, TempWRD For i = 1 To WRD If Words(i) <> "" And Words(i) <> " " Then TempWRD = TempWRD + 1 Temp(TempWRD) = Words(i) End If Next For i = 1 To 100 Words(i) = Empty Next For i = 1 To TempWRD Words(i) = Temp(i) Next WRD = TempWRD End Sub - - - תעתיק אותו ל VB, תנסה לכתוב כמה מילים המופרדות בין הרבה רווחים, ותראה מה יקרה.
 

doron129

New member
פתרון בעזרת INSTR

תנסה את INSTR שמזהה איפה המיקום של הרווח ואז תשתמש בMID
 

eliranh

New member
כנראה יש לך איזה באג.. אז הנה פתרון

אל תשתמש בsplit תעשה את זה Const space As String = " " Private Function find(Words As String, wordnum As Long) x = 1 n = wordnum tav = 1 Do If x = n Then lend = InStr(tav, Words, space) If lend = 0 Then lend = Len(Words) + 1 find = Mid$(Words, tav, lend - tav) Exit Do End If pos = InStr(tav, Words, space) If pos = 0 Then find = Mid$(Words, tav, lend - tav) Exit Do End If x = x + 1 tav = pos + 1 Loop End Function Private Sub Command1_Click() e = find("eli ddsf adas vnzxcv", 3) Text1.Text = e End Sub תוסיף כפתור בשם command1 וגם תיבת טקסט בשם text1 וזהו זה יוצא לך את המילה השלישית שבתוך הסוגריים זה מתאיים אחוז עובד! נבנה על ידי!!
 
למעלה