تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] مشكلة مع Split
#1
Question 

السلام عليكم شبابا
عندى سؤال و هو عندما اقوم بستخدم الـ 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

قال تعالى : يَامَعْشَرَ الْجِنِّ وَالإِنسِ إِنْ اسْتَطَعْتُمْ أَنْ تَنفُذُوا مِنْ أَقْطَارِ السَّمَاوَاتِ وَالأَرْضِ فَانفُذُوا لا تَنفُذُونَ إِلاّ بِسُلْطَانٍ
الرد }}}
تم الشكر بواسطة:
#2
السلام عليكم ورحمة الله وبركاته

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

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)="علي"
الرد }}}
تم الشكر بواسطة: ربيع
#3
شكرا ليك اخى adel2012 Wink
لم اقصدك ذلك و لكن سوف اقوم بالشرح بالتفصيل
عندى نص بيجى فى الشكل ده اخى
namewecomepass1234
بدون مسافات كل ما ارويد
ان اجيب كلمة wecome من بين النص لوحدها من غير كلمة name ولا باقى الناص عايزها لوحدها وبس
و ان اجيب 1234 من غير كلمة pass
بشرط ان يجى كلمة wecome فى متغير من نوع نص لوحدها
و ان تجى 1234 فى متغير من نوع نص غير المتغير التانى خالصExclamation
قال تعالى : يَامَعْشَرَ الْجِنِّ وَالإِنسِ إِنْ اسْتَطَعْتُمْ أَنْ تَنفُذُوا مِنْ أَقْطَارِ السَّمَاوَاتِ وَالأَرْضِ فَانفُذُوا لا تَنفُذُونَ إِلاّ بِسُلْطَانٍ
الرد }}}
تم الشكر بواسطة:
#4
السلام عليكم...

إذا كان النص دائماً بنفس الصيغة (أي كلمة 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

نرجو الاستفادة و السلام.
بِسْمِ اللهِ الرَّحْمَنِ الرَّحِيمِ ( وَ مَا تُقَدِّمُوا لِأَنفُسِكُم مِّنْ خَيْرٍ تَجِدُوهُ عِندَ اللهِ هُوَ خَيْراً وَ أَعْظَمَ أَجْراً ) صَدَقَ اللهُ الْعَظِيمُ
الرد }}}
تم الشكر بواسطة: ربيع , alims , الشاكي لله , prj
#5
نحمده ونصلي على رسوله الكريم

كود :
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)

المعذرة استاذنا ناجي إبراهيم كنت اكتب الرد بينما انت ترسله
الرد }}}
#6
قال تعالى : يَامَعْشَرَ الْجِنِّ وَالإِنسِ إِنْ اسْتَطَعْتُمْ أَنْ تَنفُذُوا مِنْ أَقْطَارِ السَّمَاوَاتِ وَالأَرْضِ فَانفُذُوا لا تَنفُذُونَ إِلاّ بِسُلْطَانٍ
الرد }}}
تم الشكر بواسطة: ربيع , الشاكي لله , Omar Mekkawy
#7
السلام عليكم...

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

سلام.
بِسْمِ اللهِ الرَّحْمَنِ الرَّحِيمِ ( وَ مَا تُقَدِّمُوا لِأَنفُسِكُم مِّنْ خَيْرٍ تَجِدُوهُ عِندَ اللهِ هُوَ خَيْراً وَ أَعْظَمَ أَجْراً ) صَدَقَ اللهُ الْعَظِيمُ
الرد }}}
تم الشكر بواسطة: الشاكي لله , Omar Mekkawy , ربيع
#8
طريقتك في وضع كلمة name وpass ضمن المتغير خاطئة،
لأنك ستواجه مشكلة لو احتوى اسم المستخدم أو كلمة المرور إحدى هاتين الكلمتين أو كلتيهما.
كود :
Dim nameText As String = Split((Split(returnData, "pass")(0)), "name")(1)
Dim passText As String = Split(returnData, "pass")(1)
الرد }}}
#9
(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)

كلامك صح ..

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

الرد }}}
تم الشكر بواسطة: Sajad , alims , Omar Mekkawy , vbnet , prj



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم