ورود

View Full Version : سوال: مشکل تابع SplitLines



IamOverlord
جمعه 22 بهمن 1389, 11:40 صبح
سلام دوستان!
مشکل این قطع کد چیه؟
می خوام با این روش خطوط رو جدا کنم:

Private Sub rtbCode_DblClick()
Dim Lines()
ReDim Lines(0)
For i = 1 To Len(rtbCode.Text)
s = s + Str(Asc(Mid(rtbCode.Text, i, 1)))
Next
Text1.Text = s
SplitLines rtbCode.Text, Lines()
MsgBox Lines(1)
End Sub

Public Sub SplitLines(strText As String, ByRef LinesArray())
On Error Resume Next 'dsf
l = Len(strText)
t = Chr(13) + Chr(13) + Chr(10)
schar = 1
For i = 1 To l - 1
If Asc(Mid(t, i, 1)) = 13 And Asc(Mid(t, i + 1, 1)) = 10 Then
AddItemToArray LinesArray(), Mid(t, schar, i - 1 - schar + 1)
schar = i + 2
End If
Next
End Sub

Public Sub AddItemToArray(ByRef ItemsArray(), NewItem)
Dim NewItemsArray()
ReDim NewItemsArray(UBound(ItemsArray()) + 1)
For i = 0 To UBound(ItemsArray)
NewItemsArray(i) = ItemsArray(i)
Next
NewItemsArray(UBound(NewItemsArray())) = NewItem
ReDim ItemsArray(UBound(NewItemsArray()))
For i = 0 To UBound(NewItemsArray())
ItemsArray(i) = NewItemsArray(i)
Next
End Sub

محسن واژدی
جمعه 22 بهمن 1389, 12:08 عصر
سلام میشه بیشتر توضیح بدین که میخواین چه خطوطی رو جدا کنین، خب اگه بخواین شماره برگشته شده کاراکترها رو در آرایه Line جدا کنین تابع زیر اینکار رو انجام میده:

Lines = Split(s, " ")

البته برای اینکه خطایی رخ ندهد باید نوع آرایه Lineرو مشخص کنین

محسن واژدی
جمعه 22 بهمن 1389, 12:23 عصر
اگه منظورتون تبدیل کاراکترهای موجود در جعبه rtbCode به کد اسکای و قرار داده هر کدام از اون کدها در یک آرایه است؛ از کدهای زیر استفاده کنین



Private Sub Command1_Click()

Dim i&, Lines$(), strs$

For i& = 1 To Len(rtbCode)
strs$ = strs$ & Str(Asc(Mid(rtbCode, i&, 1)))
Next i&

Lines$ = Split(strs$)
Text1.Text = strs$
MsgBox Lines$(1)
End Sub





موفق باشید

IamOverlord
جمعه 22 بهمن 1389, 13:04 عصر
سلام دوستان،
ممنون از توجّهتون،
درواقع می خوام یه برنامه بنویسم که یه متن رو بگیره و اون رو به خطوطش در یه آرایه ی String تجزیه کنه.

محسن واژدی
شنبه 23 بهمن 1389, 15:41 عصر
سلام علیکم
خب اگه منظور تون اینه که میخواین کاراکتراش رو در یک آرایه دخیره کنین که دستورات پست 3 این کار رو انجام میده
مشکلی بود در خدمتیم

موفق باشید

IamOverlord
دوشنبه 09 اسفند 1389, 16:33 عصر
سلام علیکم
خب اگه منظور تون اینه که میخواین کاراکتراش رو در یک آرایه دخیره کنین که دستورات پست 3 این کار رو انجام میده
مشکلی بود در خدمتیم

موفق باشید


سلام دوستان،
در واقع می خوام خط به خط جدا بشن نه کاراکتر به کاراکتر؛ ضمنا اگه طرز کا با تابع Split رو هم بگید ممنون می شم.

محسن واژدی
سه شنبه 10 اسفند 1389, 16:20 عصر
سلام
نمونه زیر را مشاهده کنین
این نمونه خطوط مشخص شده را در یک آرایه میشکند و Delimiter آن هم vbCrLf یا همان کاراکتر انتهای خطوط است


اگه طرز کا با تابع Split رو هم بگید ممنون می شم.
تابع Split یک رشته را میگیرد و اونو بر اساس کاراکتری که مشخص کرده این در یک آرایه میشکند
به کدهای زیر توجه کنین:

Dim MyArr$(), my_str$
my_str$ = "1|2|3|4"
MyArr$ = Split(my_str$, "|")


این دستور کارکاتر های my_str$را در آرایه MyArr$() میشکند همینطور کاراکتر "|" هم به عنوان شاخص انتخاب شده است
البته یه نکته را هم دقت داشته باشین که حتما" با یک نوع آرایه را برای نگهداری رشته مشخص کنین در غیر اینصورت تابع Split خطای Mismatch میده

موفق باشید
یاعلی

IamOverlord
پنج شنبه 12 اسفند 1389, 19:08 عصر
سلام دوستان!
یه سوال دیگه در همین مورد:
چه طوری می تونیم کاری کنیم که مثل تابع Split خروجی تابعمون از نوع آرایه باشه؟

محسن واژدی
پنج شنبه 12 اسفند 1389, 20:10 عصر
سلام علیکم
برای اینکار میتوانید متغیری را در Function تعریف کنید از نوع آرایه که نتیجه عملیات را در آن ذخیره کند

موفق باشید

IamOverlord
جمعه 28 مرداد 1390, 20:14 عصر
ولی تابع Split این طور نیست. اگه بخوایم دقیقا مثل تابع Split خروجی تابعمون Array باشه باید چی کار کنیم؟

setroyd
شنبه 29 مرداد 1390, 12:41 عصر
با یه function میشه منظورتو نمیفهمم خیلی راحت میشه این کارو کرد !

IamOverlord
شنبه 29 مرداد 1390, 15:58 عصر
منظورم اینه که یه Function از نوع Array تعریف کنیم.

محسن واژدی
شنبه 29 مرداد 1390, 16:57 عصر
منظورم اینه که یه Function از نوع Array تعریف کنیم.

اعلان یک function از نوع آرایه را هم میتوانید بصورت variant و هم بصورت اعلان آرایه معمولی تعریف کنید و هم میتوانید برای تابع مورد نظر دو پارامتر تعریف کنید، پارامتراول رشته ای است که بایستی در آرایه شکسته شود و پارامتر دوم که از نوع آرایه تعریف میشود نتیجه عملیات را در خود نگه میدارد

توضیحات دو روش اول را در پست شماره 16 گذاشته ام

موفق باشید

IamOverlord
شنبه 29 مرداد 1390, 17:01 عصر
اعلان یک function از نوع آرایه را نمیتوانید اما میتوانید برای تابع مورد نظر دو پارامتر تعریف کنید، پارامتراول رشته ای است که بایستی در آرایه شکسته شود و پارامتر دوم که از نوع آرایه تعریف میشود نتیجه عملیات را در خود نگه میدارد

موفق باشید

اگه نمی شه، پس تابع Split خود VB6 چی؟ اون تابع رو به طور خاص و متفاوت از بقیه طراحی کردن؟

محسن واژدی
شنبه 29 مرداد 1390, 17:51 عصر
اگه نمی شه، پس تابع Split خود VB6 چی؟ اون تابع رو به طور خاص و متفاوت از بقیه طراحی کردن؟

اینکه یک تابع را مطلقا" از نوع آرایه تعریف کنیم میتوانید تابع را از نوع variant تعریف و نتیجه را از نوع آرایه بازگردانید

موفق باشید

محسن واژدی
شنبه 29 مرداد 1390, 20:42 عصر
الآن که بررسی کردم چرا میشود، کاملا" هم پشتیبانی میشود و آنکه قبلا" گفتم بخاطر موضوعی بود که الآن میبینم شد، دستور زیر نتیجه را به عنوان یک آرایه برگشت میدهد:

Private Sub Command1_Click()
MsgBox UBound(SplitX("1+2+3+4+5", "+"))
End Sub

Public Function SplitX(Expression$, Optional Delimiter$ = " ", Optional Limit& = -1) As String()
SplitX = Split(Expression$, Delimiter$, Limit&)
End Function



البته هم میتوانید تابع را بصورت variant که در پست قبل عرض شد و هم بصورت بالا تعریف کنید و نتیجه را بصورت آرایه برگشت دهید

پست 13 نیز ویرایش شد

موفق باشید