منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
مشكله بسيطه بالريجكس حاولت كتير فيها قبل الموضوع - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : مشكله بسيطه بالريجكس حاولت كتير فيها قبل الموضوع (/showthread.php?tid=34357)



مشكله بسيطه بالريجكس حاولت كتير فيها قبل الموضوع - اليوم السابع - 17-04-20

عندي تيكست بوكس به
كود :
{"id":"10000","name":"Anosh"
{"id":"7557","name":"Fathy Kanu","mobile_phone":"+201001"
{"id":"10065","name":"Fathe Mohamed Akoty"
وعندي زر وعندي داتا جريد فيو بها 3 اعمده 
اريد عند الضغط علي الزر اللي امام كلمه اي دي يروح في اول عامود واللي امام كلمه نيم يروح في ثاني عامود واللي امام كلمه مويايل فون يروح في ثالث عامود 
كتبت هذا الكود ولكن لاظبط معي 
كود :
Dim json As String = TextBox1.Text
       Dim Name = From t As String In json.Split(vbNewLine) Select _
                System.Text.RegularExpressions.Regex.Match(t, "id"":""(.+)"",""").Groups(1).Value
       Dim id = From t As String In json.Split(vbNewLine) Select _
                System.Text.RegularExpressions.Regex.Match(t, "name"":""(.+)"",""").Groups(1).Value
       Dim id1 = From t As String In json.Split(vbNewLine) Select _
             System.Text.RegularExpressions.Regex.Match(t, """mobile_phone"":""(.+)""").Groups(1).Value

       For i As Integer = 0 To Name.Count - 1
           DataGridView1.Rows.Add(id(i), Name(i), id1(i))
       Next
       Dim RowsCount As Integer = 0
       If DataGridView1.AllowUserToAddRows = True Then
           RowsCount = DataGridView1.Rows.Count - 2
       Else
           RowsCount = DataGridView1.Rows.Count - 1
       End If
       For i = 0 To RowsCount
           ListBox3.Items.Add(DataGridView1.Rows(i).Cells(0).Value)
       Next



RE: مشكله بسيطه بالريجكس حاولت كتير فيها قبل الموضوع - ابراهيم ايبو - 17-04-20

السلام عليكم اخي اليوم السابع
بغض النظر عن كودك والعمل بالريجكس
اليك مثال  وظريقة افضل


RE: مشكله بسيطه بالريجكس حاولت كتير فيها قبل الموضوع - اليوم السابع - 17-04-20

(17-04-20, 09:25 PM)ابراهيم ايبو كتب : السلام عليكم اخي اليوم السابع
بغض النظر عن كودك والعمل بالريجكس
اليك مثال  وظريقة افضل

حبيبي يا كبير جاري التحميل والتجربه

(17-04-20, 09:25 PM)ابراهيم ايبو كتب : السلام عليكم اخي اليوم السابع
بغض النظر عن كودك والعمل بالريجكس
اليك مثال  وظريقة افضل

للأسف حاولت اعدل عليه ما وفاش بالغرض ولكن علي اي حال فانا شاكر لك جدااا


RE: مشكله بسيطه بالريجكس حاولت كتير فيها قبل الموضوع - ابراهيم ايبو - 17-04-20

اخي اليوم السابع 
يجب ان يكون النص الذي في مربع النص بنفس الشكل الذي وضعته لك في مربع النص
لان التقطيع معتمد على اشارتي(الفاصلة المنقوطة) وكذلك (=)


RE: مشكله بسيطه بالريجكس حاولت كتير فيها قبل الموضوع - اليوم السابع - 17-04-20

(17-04-20, 10:26 PM)ابراهيم ايبو كتب : اخي اليوم السابع 
يجب ان يكون النص الذي في مربع النص بنفس الشكل الذي وضعته لك في مربع النص
لان التقطيع معتمد على اشارتي (Wink وكذلك (=)

اعلم ذلك ولكن اذا كان التكست بوكس يساوي اكثر من نص لا يعامل الا مع النص الاول فقط + ان غيرت الاشارات لم تنجح


RE: مشكله بسيطه بالريجكس حاولت كتير فيها قبل الموضوع - ابراهيم ايبو - 17-04-20

اخي انت لديك سجل وتريد ادخاله في الداتا غرايد
الطريقة الامثل كل عمود يأخذ من مربع نص مستقل
اما ان كانت كل القيم في مربع نص واجد فيجب ان يكون لها فورمات معينة وانا استخدمت فورمات اشارتي الفاصبة واليساوي
وان كان لديك نص وفيه عدد من السطور وكل سطر عبارة عن سجل وتريد جلب البيانات الى الداتا غرايد فهذا امر مختلف يعني انك تريد استخدام نص كقاعدة بيانات لدي مثال شبه جاهز بقي  القليل لاكماله فيه كل شيء جديد - حفظ - تعديل - حذف - بحث - انشاء نص كقاعدة بيانات -حذف القاعدة - ازالة السطور الفارغة ومزايا اخرى سوف اورده في القريب العاجل بعد ان ينتهي ان شاء الله


RE: مشكله بسيطه بالريجكس حاولت كتير فيها قبل الموضوع - اليوم السابع - 17-04-20

(17-04-20, 10:40 PM)ابراهيم ايبو كتب : اخي انت لديك سجل وتريد ادخاله في الداتا غرايد
الطريقة الامثل كل عمود يأخذ من مربع نص مستقل
اما ان كانت كل القيم في مربع نص واجد فيجب ان يكون لها فورمات معينة وانا استخدمت فورمات اشارتي الفاصبة واليساوي
وان كان لديك نص وفيه عدد من السطور وكل سطر عبارة عن سجل وتريد جلب البيانات الى الداتا غرايد فهذا امر مختلف يعني انك تريد استخدام نص كقاعدة بيانات لدي مثال شبه جاهز بقي  القليل لاكماله فيه كل شيء جديد - حفظ - تعديل - حذف - بحث - انشاء نص كقاعدة بيانات -حذف القاعدة - ازالة السطور الفارغة ومزايا اخرى سوف اورده في القريب العاجل بعد ان ينتهي ان شاء الله

شكرا لك اخي ولكن الموضوع ابسط من كده بكتير


RE: مشكله بسيطه بالريجكس حاولت كتير فيها قبل الموضوع - ابو ليلى - 19-04-20

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

كونك تتعامل مع Regex بشكل مستمر المفروض ان تلاحقها باستمرا و تتعرف على طرقها.
تعرف على طرق كتابة الباترن.

PHP كود :
       Dim id_pattern As String "^.*id:(\w+(\s\w*)?)" 

الشرح:
^.*id:
و تعني نص يبدأ بـ :id     (.^)
هي كل الحروف بين (a-z) و (A-Z) و الارقام (0-9)       (w\)         
و هي تعني عدد محارف يبدأ من 1  الى لا نهاية و يمكن تحديد العدد     (+)
و يمكن ان تنوب (*) و هي تبدأ من الصفر.
و هي تعني اننا نريد شمل المسافات الفارغة    (\s)
و يمكن جعل المسافات الفارغة او اي شي اخر اختياري عبر المعامل (?)   فتصبح   (?\s)

و يمكن كتابة الباترن السابق بطريقة اخرى
PHP كود :
id:(\w*\s?\w*) 

PHP كود :
Dim phone_pattern As String "^.*mobile_phone:(\+?(\d*))" 
الشي الجديد في هذا الباترن:
(+\)  . كون الاشارة + مستخدمة في تعابير Regex كمعامل رئيسي لذا وجب علينا ان نخبره اننا نريد منه تحسها كمحرف عادي نريد التعامل معه و تستخدم  (\)   مع اي معامل لاجباره على قرائتها كمحرف نريد البحث عنه و يسمى الهروب من التحسس.
(d\) نستخدمها للتعامل مع الخانات الرقمية و يمكنك استعمال (w\)  بدلاً عنها.

PHP كود :
Dim name_pattern As String "^.*name:(\w*\s?\w*)" 
و يمكن كتابته بطريقة اخرى
PHP كود :
Dim name_pattern As String "^.*name:(\w+(\s\w*)?)*)" 

تتنوع طرق الكتابة حسب كل شخص و لاتهم الطريقة كثيراً بقدر ما تهم النتيجة.



بناءً على ما سبق:
يمكنك عمل اجراء ينفذ لك المطلوب كما يلي:
PHP كود :
   Public Sub GetData()
 
       Dim json As String TextBox1.Text.Replace("""""").Replace("{""")

 
       Dim Content From t As String In json.Split(vbNewLine)

 
       Dim idnamemobile_phone As String

        Dim id_pattern 
As String "^.*id:(\w+(\s\w*)?)"
 
       Dim name_pattern As String "^.*name:(\w*\s?\w*)"
 
       Dim phone_pattern As String "^.*mobile_phone:(\+?(\d*))"

 
       Dim options As RegexOptions RegexOptions.Multiline


        For p 
As Integer 0 To Content.Count 1
            id 
Regex.Match(Content(p).ToStringid_patternoptions).Groups(1).Value
            name 
Regex.Match(Content(p).ToStringname_patternoptions).Groups(1).Value
            mobile_phone 
Regex.Match(Content(p).ToStringphone_patternoptions).Groups(1).Value
            Dim Row 
As String() = New String() {idnamemobile_phone}
 
           DataGridView1.Rows.Add(Row)
 
           ListBox3.Items.Add(String.Join(" , "Row))
 
           'ListBox3.Items.Add(name)
        Next

    End Sub 


حاول ان تتعرف اكثر على استخدامها
اهديك هذا الموقع للتعامل مع Regex بشكل مباشر 
ضع نصوصك التي تريدها و اكتب الباترن و عاين النتيجة خطوة بخطوة 
و بعد ان تتأكد من نجاح العمل تأتي الخطوة الاجمل و هي انتاج كودك من الموقع مباشرة عبر Code Generator في نفس النافذة
و هو ينتج لك كود بعدة لغات برمجة و منها #C لتتعامل معه مباشرة.
regex101


بالتوفيق