تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
نظرا لي انشغال الاخ ابو روضه سؤال في ال Regex
#1
عندي في ريتش بوكس هذه الجمله 
"name":"rtrffss","fan_count":11117,"link":"www.web.com/","id":"5544488889955"
وعندي داتا جريد فيو محتاج اعدل علي الباترن حتي اقدر انا اضيف كل المحتوي في عامود في الداتا جريد فيو 
كتبت هذا الكود ولكن لم يظبط معي 
كود :
Dim json As String = TextBox3.Text


         Dim name = From t As String In json.Split(vbNewLine) Select _
              System.Text.RegularExpressions.Regex.Match(t, "name"":""(.+)"",").Groups(1).Value

         Dim fan_count = From t As String In json.Split(vbNewLine) Select _
             System.Text.RegularExpressions.Regex.Match(t, "fan_count"":(.+),""").Groups(1).Value
         Dim link = From t As String In json.Split(vbNewLine) Select _
           System.Text.RegularExpressions.Regex.Match(t, "link"":""(.+)"",""").Groups(1).Value

         Dim id = From t As String In json.Split(vbNewLine) Select _
                      System.Text.RegularExpressions.Regex.Match(t, "id"":""(.+)""").Groups(1).Value

         For i As Integer = 0 To name.Count - 1
             DataGridView1.Rows.Add(id(i), name(i), fan_count(i), link(i))
         Next
الرد }}}
تم الشكر بواسطة:
#2
السلام عليكم و رحمة الله و بركاته
اخي الكريم بما ان نصوصك اشبه ما تكون بالثابته من حيث التنسيق.
فما اراه انها جدول باعمدة و صفوف ليس الا , لماذا تتعب نفسك في اعادة صياغتها بالكود.
انت تعرف متغيرات كثيرة و مقارنات اكثر.
 الهدف من استخدام Regular Expression  هو اجراء مقارنات محددة تختلف في تفاصيلها و ضمن نطاق محدود.
اما انت لديك تفاصيل ثابته , اشرت اليك سابقا بكود نظيف يستخدم مكتبات سريعة و قليلة التكلفة على النظام
عندما تتعامل مع بيانات كثيرة ستشهد بطئ من استخدام التعابير القياسية.
ماذا لو تغير لديك الملف و اصبح لديك حقول اكثر , هل ستقوم بتغير الكود و اعادة تعريف متغيرات توافق عدد الحقول و من ثم اجراء مقارنات جديدة و اعادة التعبئة ؟؟؟
هذه ليست برمجة على ما اعتقد , الشيئ الصحيح ان ابني دالة تقوم بمعالجة الملف مهما اختلفت التفاصيل و مهما كان حجم البيانات.
على اي حال الامر يعود لك.
جرب الكود التالي
PHP كود :
   Private Sub btnGetRows_Click(sender As ObjectAs EventArgsHandles btnGetRows.Click

        For Each Str 
As String In RichTextBox1.Lines
            Str 
Str.Replace("""""")
 
           Dim items Str.Split(New Char() {","c}, StringSplitOptions.RemoveEmptyEntries).[Select_
                        
(Function(ss.Split(New Char() {":"c})).ToDictionary(Function(KK(0), Function(VV(1))

 
           DataGridView1.Rows.Add(items.Values.ToArray)
 
       Next

    End Sub 
و اذا احببت ان تقوم الدالة نفسها بصنع الاعمدة بدل من انشائها يدوياً و مهم اختلف عدد الاعمدة.
PHP كود :
       Dim Str As String RichTextBox1.Lines(0).Replace("""""")
 
       Dim items Str.Split(New Char() {","c}, StringSplitOptions.RemoveEmptyEntries).[Select_
            
(Function(ss.Split(New Char() {":"c})).ToDictionary(Function(KK(0), Function(VV(1))

 
       For Each v In items.Keys.ToArray
            DataGridView1
.Columns.Add(New DataGridViewTextBoxColumn With {.HeaderText v})
 
       Next 


بالتوفيق
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}
تم الشكر بواسطة: اليوم السابع , asemshahen5 , 3booody
#3
(22-12-19, 03:19 AM)ابو ليلى كتب : السلام عليكم و رحمة الله و بركاته
اخي الكريم بما ان نصوصك اشبه ما تكون بالثابته من حيث التنسيق.
فما اراه انها جدول باعمدة و صفوف ليس الا , لماذا تتعب نفسك في اعادة صياغتها بالكود.
انت تعرف متغيرات كثيرة و مقارنات اكثر.
 الهدف من استخدام Regular Expression  هو اجراء مقارنات محددة تختلف في تفاصيلها و ضمن نطاق محدود.
اما انت لديك تفاصيل ثابته , اشرت اليك سابقا بكود نظيف يستخدم مكتبات سريعة و قليلة التكلفة على النظام
عندما تتعامل مع بيانات كثيرة ستشهد بطئ من استخدام التعابير القياسية.
ماذا لو تغير لديك الملف و اصبح لديك حقول اكثر , هل ستقوم بتغير الكود و اعادة تعريف متغيرات توافق عدد الحقول و من ثم اجراء مقارنات جديدة و اعادة التعبئة ؟؟؟
هذه ليست برمجة على ما اعتقد , الشيئ الصحيح ان ابني دالة تقوم بمعالجة الملف مهما اختلفت التفاصيل و مهما كان حجم البيانات.
على اي حال الامر يعود لك.
جرب الكود التالي
PHP كود :
   Private Sub btnGetRows_Click(sender As ObjectAs EventArgsHandles btnGetRows.Click

        For Each Str 
As String In RichTextBox1.Lines
            Str 
Str.Replace("""""")
 
           Dim items Str.Split(New Char() {","c}, StringSplitOptions.RemoveEmptyEntries).[Select_
                        
(Function(ss.Split(New Char() {":"c})).ToDictionary(Function(KK(0), Function(VV(1))

 
           DataGridView1.Rows.Add(items.Values.ToArray)
 
       Next

    End Sub 
و اذا احببت ان تقوم الدالة نفسها بصنع الاعمدة بدل من انشائها يدوياً و مهم اختلف عدد الاعمدة.
PHP كود :
       Dim Str As String RichTextBox1.Lines(0).Replace("""""")
 
       Dim items Str.Split(New Char() {","c}, StringSplitOptions.RemoveEmptyEntries).[Select_
            
(Function(ss.Split(New Char() {":"c})).ToDictionary(Function(KK(0), Function(VV(1))

 
       For Each v In items.Keys.ToArray
            DataGridView1
.Columns.Add(New DataGridViewTextBoxColumn With {.HeaderText v})
 
       Next 


بالتوفيق
شكرا لمساعدتك اخ ابوليلي ولكن للأسف لم يفلح معي هذا الكود وجربت اكثر من طريقه لم تفلح غير ان اكتب الباترن زاي ما انا عملت في الكود ولكن مش عارف اظبطه بحيث اللي امام كلمه اي دي يروح في العامود الخاص به واللي امام كلمه لينك يروح في العامود الخاص به في الداتا جريد فيو وهكذا 
"name":"rtrffss","fan_count":11117,"link":"www.web.com/","id":"5544488889955"
الرد }}}
تم الشكر بواسطة: asemshahen5 , 3booody , ابو ليلى
#4
لو تريد جعل الid  فى خانة والاسم بخانة أخرى فجرب كتابة الكود بهذا الشكل طبعا مع
تغير الباترين تبعك.

PHP كود :
Dim id As String
            Dim name 
As String
            For Each f 
As Match In Regex.Matches(RichTextBox1.Text"تكتب هنا الباترين"RegexOptions.Compiled RegexOptions.Multiline)
 
               name f.Groups(1).Value
                id 
f.Groups(2).Value
                Dim lvi 
As New ListViewItem(name0)
 
               lvi.SubItems.Add(id)
 
               ListView1.Items.Add(lvi)
 
           Next 
الرد }}}
تم الشكر بواسطة: asemshahen5 , اليوم السابع , 3booody , ابو ليلى
#5
(22-12-19, 11:44 AM)ابو روضة كتب :
لو تريد جعل الid  فى خانة والاسم بخانة أخرى فجرب كتابة الكود بهذا الشكل طبعا مع
تغير الباترين تبعك.

PHP كود :
Dim id As String
            Dim name 
As String
            For Each f 
As Match In Regex.Matches(RichTextBox1.Text"تكتب هنا الباترين"RegexOptions.Compiled RegexOptions.Multiline)
 
               name f.Groups(1).Value
                id 
f.Groups(2).Value
                Dim lvi 
As New ListViewItem(name0)
 
               lvi.SubItems.Add(id)
 
               ListView1.Items.Add(lvi)
 
           Next 
شكرا اخي ابو روضه ولكن المشكله ليس في الكود المشكله ان مش عارف اكتب الباترن بشكل صحيح 
فا انا عندي تكست بوكس بيكون فيه الجمله دي 
"name":"rtrffss","fan_count":11117,"link":"www.facebook.com/","id":"5544488889955"
كتبت الكود بهذا الشكل علشان يرسل كل شئ الي الداتا جريد فيو ولكن ظهر هكذا 

كود :
Dim json As String = TextBox3.Text
           Dim name = From t As String In json.Split(vbNewLine) Select _
                System.Text.RegularExpressions.Regex.Match(t, "name"":""(.+)"",").Groups(1).Value
           Dim fan_count = From t As String In json.Split(vbNewLine) Select _
               System.Text.RegularExpressions.Regex.Match(t, "fan_count"":(.+),""").Groups(1).Value
           Dim link = From t As String In json.Split(vbNewLine) Select _
             System.Text.RegularExpressions.Regex.Match(t, "link"":""(.+)"",""").Groups(1).Value
           Dim id = From t As String In json.Split(vbNewLine) Select _
                        System.Text.RegularExpressions.Regex.Match(t, "id"":""(.+)""").Groups(1).Value
           For i As Integer = 0 To name.Count - 1
               DataGridView2.Rows.Add(id(i), name(i), fan_count(i), link(i))
           Next

خانه id مظبوطه وخانه link مظبوطه المشكله في خانه name و likes فيهم زياداتا زاي ما الصوره موضحه
الرد }}}
تم الشكر بواسطة: 3booody , asemshahen5 , ابو ليلى
#6
ما لو حضرتك بتدرك صفحة الويب التى تريد جلب المعلومات منها كنت ريحتك بفضل الله.
لكنك بتكتب السؤال وأنا لا أدرى من أين ستحصل على البيانات.
فلا يكفى ما موجود بداخل التكست بوكس "name":"rtrffss","fan_count":11117,"link":"www.facebook.com/","id":"5544488889955"..
من فضلك أكتب الصفحة التى تريد جلب المعلومات منها لآنى سأجلبها من خلال مكتبة HtmlAgilityPa
فهى الأفضل بالنسبة لى ولو لم أعرف سأقول لك " حاولت ولم أعرف "
الرد }}}
تم الشكر بواسطة: 3booody , asemshahen5 , ابو ليلى
#7
السلام عليكم ورحمة الله وبركاته

بعد أذن اخوتي واساتذتي ,, اتمنى هذا الكود يكون شرح الك عن التعابير القياسية هو جواب لسؤالك ولكن بصيغة مختلفة حتى تفهم التعابير القياسية اكثر وال Groups في التعابير القياسية وتحل سؤالك بنفسك لاني عطيتك نصف الحل
ولاتستخدم نفس طريقتي هدفي هو فقط اوصلك فكرة التعامل مع النصوص بال Regex


كود :
Dim txt As String = TextBox1.Text.Replace("""", "'").ToLower
       Dim data = From t As String In txt.Split(vbNewLine) Select Regex.Match(t, _
       "name':'(.+)','fan_count':(.+),'link':'(.+)','id':'(.+)'").Groups(1).Value & "#" & _
       Regex.Match(t, "name':'(.+)','fan_count':(.+),'link':'(.+)','id':'(.+)'").Groups(2).Value & "#" & _
       Regex.Match(t, "name':'(.+)','fan_count':(.+),'link':'(.+)','id':'(.+)'").Groups(3).Value & "#" & _
       Regex.Match(t, "name':'(.+)','fan_count':(.+),'link':'(.+)','id':'(.+)'").Groups(4).Value

       MsgBox("Name=" & data(0).Split("#")(0))
       MsgBox("fan=" & data(0).Split("#")(1))
       MsgBox("link=" & data(0).Split("#")(2))
       MsgBox("id=" & data(0).Split("#")(3))


لاتنسى استدعاء مجال الاسماء 


كود :
Imports System.Text.RegularExpressions
الرد }}}
#8
(22-12-19, 04:18 PM)3booody كتب : السلام عليكم ورحمة الله وبركاته

بعد أذن اخوتي واساتذتي ,, اتمنى هذا الكود يكون شرح الك عن التعابير القياسية هو جواب لسؤالك ولكن بصيغة مختلفة حتى تفهم التعابير القياسية اكثر وال Groups في التعابير القياسية وتحل سؤالك بنفسك لاني عطيتك نصف الحل
ولاتستخدم نفس طريقتي هدفي هو فقط اوصلك فكرة التعامل مع النصوص بال Regex


كود :
Dim txt As String = TextBox1.Text.Replace("""", "'").ToLower
       Dim data = From t As String In txt.Split(vbNewLine) Select Regex.Match(t, _
       "name':'(.+)','fan_count':(.+),'link':'(.+)','id':'(.+)'").Groups(1).Value & "#" & _
       Regex.Match(t, "name':'(.+)','fan_count':(.+),'link':'(.+)','id':'(.+)'").Groups(2).Value & "#" & _
       Regex.Match(t, "name':'(.+)','fan_count':(.+),'link':'(.+)','id':'(.+)'").Groups(3).Value & "#" & _
       Regex.Match(t, "name':'(.+)','fan_count':(.+),'link':'(.+)','id':'(.+)'").Groups(4).Value

       MsgBox("Name=" & data(0).Split("#")(0))
       MsgBox("fan=" & data(0).Split("#")(1))
       MsgBox("link=" & data(0).Split("#")(2))
       MsgBox("id=" & data(0).Split("#")(3))


لاتنسى استدعاء مجال الاسماء 


كود :
Imports System.Text.RegularExpressions

بفضل الله وفضل اخ عاصم وابو روضه و ابو ليلي و اخ عبود تم الحل كل الاكواد صحيحه ولكن الخطأ كان مني فالأنسان يخطأ و يصيب
الرد }}}
تم الشكر بواسطة: asemshahen5 , ابو ليلى
#9
الفضل الله و الحمد الله و الشكر الله عز وجل بارك الله فيك و جزاك الله عنا كل خير موفق انشاء الله .
الرد }}}
تم الشكر بواسطة: ابو ليلى , ابو ليلى



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


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