المشاركات : 567
المواضيع 206
الإنتساب : Jul 2019
السمعة :
14
الشكر: 372
تم شكره 559 مرات في 319 مشاركات
عندي في ريتش بوكس هذه الجمله
"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
المشاركات : 662
المواضيع 39
الإنتساب : Feb 2014
السمعة :
195
الشكر: 1474
تم شكره 1740 مرات في 622 مشاركات
السلام عليكم و رحمة الله و بركاته
اخي الكريم بما ان نصوصك اشبه ما تكون بالثابته من حيث التنسيق.
فما اراه انها جدول باعمدة و صفوف ليس الا , لماذا تتعب نفسك في اعادة صياغتها بالكود.
انت تعرف متغيرات كثيرة و مقارنات اكثر.
الهدف من استخدام Regular Expression هو اجراء مقارنات محددة تختلف في تفاصيلها و ضمن نطاق محدود.
اما انت لديك تفاصيل ثابته , اشرت اليك سابقا بكود نظيف يستخدم مكتبات سريعة و قليلة التكلفة على النظام
عندما تتعامل مع بيانات كثيرة ستشهد بطئ من استخدام التعابير القياسية.
ماذا لو تغير لديك الملف و اصبح لديك حقول اكثر , هل ستقوم بتغير الكود و اعادة تعريف متغيرات توافق عدد الحقول و من ثم اجراء مقارنات جديدة و اعادة التعبئة ؟؟؟
هذه ليست برمجة على ما اعتقد , الشيئ الصحيح ان ابني دالة تقوم بمعالجة الملف مهما اختلفت التفاصيل و مهما كان حجم البيانات.
على اي حال الامر يعود لك.
جرب الكود التالي
PHP كود :
Private Sub btnGetRows_Click(sender As Object, e As EventArgs) Handles btnGetRows.Click
For Each Str As String In RichTextBox1.Lines Str = Str.Replace("""", "") Dim items = Str.Split(New Char() {","c}, StringSplitOptions.RemoveEmptyEntries).[Select] _ (Function(s) s.Split(New Char() {":"c})).ToDictionary(Function(K) K(0), Function(V) V(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(s) s.Split(New Char() {":"c})).ToDictionary(Function(K) K(0), Function(V) V(1))
For Each v In items.Keys.ToArray DataGridView1.Columns.Add(New DataGridViewTextBoxColumn With {.HeaderText = v}) Next
بالتوفيق
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
المشاركات : 567
المواضيع 206
الإنتساب : Jul 2019
السمعة :
14
الشكر: 372
تم شكره 559 مرات في 319 مشاركات
(22-12-19, 03:19 AM)ابو ليلى كتب : السلام عليكم و رحمة الله و بركاته
اخي الكريم بما ان نصوصك اشبه ما تكون بالثابته من حيث التنسيق.
فما اراه انها جدول باعمدة و صفوف ليس الا , لماذا تتعب نفسك في اعادة صياغتها بالكود.
انت تعرف متغيرات كثيرة و مقارنات اكثر.
الهدف من استخدام Regular Expression هو اجراء مقارنات محددة تختلف في تفاصيلها و ضمن نطاق محدود.
اما انت لديك تفاصيل ثابته , اشرت اليك سابقا بكود نظيف يستخدم مكتبات سريعة و قليلة التكلفة على النظام
عندما تتعامل مع بيانات كثيرة ستشهد بطئ من استخدام التعابير القياسية.
ماذا لو تغير لديك الملف و اصبح لديك حقول اكثر , هل ستقوم بتغير الكود و اعادة تعريف متغيرات توافق عدد الحقول و من ثم اجراء مقارنات جديدة و اعادة التعبئة ؟؟؟
هذه ليست برمجة على ما اعتقد , الشيئ الصحيح ان ابني دالة تقوم بمعالجة الملف مهما اختلفت التفاصيل و مهما كان حجم البيانات.
على اي حال الامر يعود لك.
جرب الكود التالي
PHP كود :
Private Sub btnGetRows_Click(sender As Object, e As EventArgs) Handles btnGetRows.Click
For Each Str As String In RichTextBox1.Lines Str = Str.Replace("""", "") Dim items = Str.Split(New Char() {","c}, StringSplitOptions.RemoveEmptyEntries).[Select] _ (Function(s) s.Split(New Char() {":"c})).ToDictionary(Function(K) K(0), Function(V) V(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(s) s.Split(New Char() {":"c})).ToDictionary(Function(K) K(0), Function(V) V(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"
المشاركات : 1,468
المواضيع 351
الإنتساب : Apr 2016
السمعة :
334
الشكر: 3384
تم شكره 2456 مرات في 1124 مشاركات
لو تريد جعل ال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(name, 0) lvi.SubItems.Add(id) ListView1.Items.Add(lvi) Next
المشاركات : 567
المواضيع 206
الإنتساب : Jul 2019
السمعة :
14
الشكر: 372
تم شكره 559 مرات في 319 مشاركات
(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(name, 0) 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 فيهم زياداتا زاي ما الصوره موضحه
المشاركات : 1,468
المواضيع 351
الإنتساب : Apr 2016
السمعة :
334
الشكر: 3384
تم شكره 2456 مرات في 1124 مشاركات
22-12-19, 01:52 PM
(آخر تعديل لهذه المشاركة : 22-12-19, 02:44 PM {2} بواسطة ابو روضة.)
ما لو حضرتك بتدرك صفحة الويب التى تريد جلب المعلومات منها كنت ريحتك بفضل الله.
لكنك بتكتب السؤال وأنا لا أدرى من أين ستحصل على البيانات.
فلا يكفى ما موجود بداخل التكست بوكس "name":"rtrffss","fan_count":11117,"link":"www.facebook.com/","id":"5544488889955"..
من فضلك أكتب الصفحة التى تريد جلب المعلومات منها لآنى سأجلبها من خلال مكتبة HtmlAgilityPa
فهى الأفضل بالنسبة لى ولو لم أعرف سأقول لك " حاولت ولم أعرف "
المشاركات : 664
المواضيع 32
الإنتساب : Oct 2013
السمعة :
81
الشكر: 776
تم شكره 992 مرات في 298 مشاركات
السلام عليكم ورحمة الله وبركاته
بعد أذن اخوتي واساتذتي ,, اتمنى هذا الكود يكون شرح الك عن التعابير القياسية هو جواب لسؤالك ولكن بصيغة مختلفة حتى تفهم التعابير القياسية اكثر وال 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
المشاركات : 567
المواضيع 206
الإنتساب : Jul 2019
السمعة :
14
الشكر: 372
تم شكره 559 مرات في 319 مشاركات
(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
بفضل الله وفضل اخ عاصم وابو روضه و ابو ليلي و اخ عبود تم الحل كل الاكواد صحيحه ولكن الخطأ كان مني فالأنسان يخطأ و يصيب
المشاركات : 2,329
المواضيع 81
الإنتساب : May 2018
السمعة :
522
الشكر: 14039
تم شكره 5671 مرات في 2269 مشاركات
الفضل الله و الحمد الله و الشكر الله عز وجل بارك الله فيك و جزاك الله عنا كل خير موفق انشاء الله .
سبحان الله وبحمده سبحان الله العظيم و الحمد لله ولا اله الا الله والله اكبر
|