منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : مشكلة مع Split
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .

السلام عليكم شبابا
عندى سؤال و هو عندما اقوم بستخدم الـ Split يحصل خطاء الاول هو ده الكود المستخدام
كود :
Dim str As String
                Dim strr As String
                Dim strArr() As String
                Dim count As Integer
                str = returnData
                strr = returnData
                strArr = str.Split("pass")
                strArr = strr.Split("name")
                For count = 0 To strArr.Length - 1 Or strr.Length - 1
                    Console.WriteLine(vbNewLine & strArr(count))
                Next
شرح الكود
تاتى البيانات عن طريق المتغير returnData و هو متغير نصى
المطلوب هنا هو ان اجيب الاسم لوحد و الباص لوحد و لكن عطول بتلقى كلمة اسم و باص موجودها فى السطر
بمعنى اخر اوريد الاسم فى متغير نصى لوحدو و الباص فى متغير لوحد مع خذف كلمة اسم و باصExclamation

السلام عليكم ورحمة الله وبركاته

هذا مثال يوضح استخدام الدالة السابقة

Dim test_split(), txt As String

txt="100 احمد خالد على"
'يتم فصل السلسة النصية حسب الفراغ
'في السلسة النصية السابقة
test_split = Split(txt, " ")
For i As Int16 = 0 To test_split.LongCount - 1
MsgBox(test_split(i))
Next


==================================================
النتيجة ستكون على النحو التالي

test_split(0)="100"
test_split(1)="احمد"
test_split(2)="خالد"
test_split(3)="علي"
شكرا ليك اخى adel2012 Wink
لم اقصدك ذلك و لكن سوف اقوم بالشرح بالتفصيل
عندى نص بيجى فى الشكل ده اخى
namewecomepass1234
بدون مسافات كل ما ارويد
ان اجيب كلمة wecome من بين النص لوحدها من غير كلمة name ولا باقى الناص عايزها لوحدها وبس
و ان اجيب 1234 من غير كلمة pass
بشرط ان يجى كلمة wecome فى متغير من نوع نص لوحدها
و ان تجى 1234 فى متغير من نوع نص غير المتغير التانى خالصExclamation
السلام عليكم...

إذا كان النص دائماً بنفس الصيغة (أي كلمة name يليها الاسم ثم كلمة pass يليها الرقم) فاكتب الإجراء التالي في بداية تعريف الـ Class:

كود :
Private Sub ExtractData(ByRef AText As String, ByRef AName As String, ByRef APass As String)
    AText = AText.Trim
    If AText = "" Then
        AName = ""
        APass = ""
    Else
        Dim PassPos As Integer = AText.ToUpper().IndexOf("PASS")
        If PassPos = -1 Then
            AName = AText.Substring(4)
            APass = ""
        Else
            AName = AText.Substring(4, PassPos - 4)
            APass = AText.Substring(PassPos + 4)
        End If
    End If
End Sub

ثم قم باستدعاء الإجراء بالشكل التالي (المثال يفترض أن النص الأصلي موجود في TextBox1 و سيضع الاسم في TextBox2 و الرقم في TextBox3):

كود :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim MyText As String = TextBox1.Text
    Dim TheName, ThePass As String

    ExtractData(MyText, TheName, ThePass)
    TextBox2.Text = TheName
    TextBox3.Text = ThePass
End Sub

نرجو الاستفادة و السلام.
نحمده ونصلي على رسوله الكريم

كود :
Dim mainText As String = "namewecomepass1234"
Dim nameText As String = mainText.Substring(4, (mainText.Length - (mainText.Length - mainText.IndexOf("pass")) - 4))
Dim passText As String = mainText.Substring(mainText.IndexOf("pass") + 4, mainText.Length - (mainText.IndexOf("pass") + 4))

MessageBox.Show(nameText & vbNewLine & passText)

الدالة Substring خاصة باقتطاع النص، الوسيطة الأولى لبداية الاقتطاع والوسيطة الثانية لطول الاقتطاع (لو تركناها فارغة أي الوسيطة الثانية يقتص باقي النص من بداية التحديد في الوسيطة الأولى إلى نهاية النص) بامكاننا في المتغير (كلمة المرور) عدم ارسال الوسيطة الثانية وسيتم جلب الكلمة المرادة لكن احببت أن اضع الكود للتوضيح فقط.

كود :
Dim passText As String = mainText.Substring(mainText.IndexOf("pass") + 4)

المعذرة استاذنا ناجي إبراهيم كنت اكتب الرد بينما انت ترسله
السلام عليكم...

و الشكر الجزيل لك أخي ربيع، ففي الزيادة إفادة، و لولا وجود الأعضاء الذين يتبرعون بوقتهم و جهدهم لطرح المواضيع و تقديم الإجابات لما نهض هذا المنتدى و تقدم. نرجو من الله أن يكون ذلك صدقةً في كتاب حسناتهم عند الله.

سلام.
طريقتك في وضع كلمة name وpass ضمن المتغير خاطئة،
لأنك ستواجه مشكلة لو احتوى اسم المستخدم أو كلمة المرور إحدى هاتين الكلمتين أو كلتيهما.
كود :
Dim nameText As String = Split((Split(returnData, "pass")(0)), "name")(1)
Dim passText As String = Split(returnData, "pass")(1)
(12-02-14, 07:49 AM)vbnet كتب : [ -> ]طريقتك في وضع كلمة name وpass ضمن المتغير خاطئة،
لأنك ستواجه مشكلة لو احتوى اسم المستخدم أو كلمة المرور إحدى هاتين الكلمتين أو كلتيهما.
كود :
Dim nameText As String = Split((Split(returnData, "pass")(0)), "name")(1)
Dim passText As String = Split(returnData, "pass")(1)

كلامك صح ..

الطريقة مو عملية ، لذلك من الافضل عمل متغيرين او مصفوفة