السلام عليكم ورحمة الله و بركاته
اذا لدين االشرط التالي:
كود :
If unods.Count < contents.Count Then Continue For
هل يعني انه يتخطى كل جسم for حتى لو يوجد جمل بعدها؟
كود :
for i = 0 to 100
if not then continu for
maybe yes maybe not
other things
other things
next
أعتقد معناه أنه إذا تحقق الشرط ؛ فإنه سوف يتم إيقاف حلقة For
أما إذا لم يتحقق الشرط فإنه سيتم مواصلة حلقة For حتى النهاية ، وهي 100
(04-11-25, 01:26 AM)أبو خالد الشكري كتب : [ -> ]أعتقد معناه أنه إذا تحقق الشرط ؛ فإنه سوف يتم إيقاف حلقة For
أما إذا لم يتحقق الشرط فإنه سيتم مواصلة حلقة For حتى النهاية ، وهي 100
هذا يعني هذا الاشتراط خاطيء فلابد من استبداله بـ
كود :
for ***
if a=b then
anything
end if
other
other
next
بارك الله فيك وشكر لك.
السلام عليكم ورحمة الله وبركاته
(Continue For) تعني تجاوز كل ما بعد هذا الكود و انتقل للدوران التالي ..
مثلا تريد أن تستخرج الأرقام الفردية من مجموعة أرقام مابين 1 إلى 10 فتكتب الكود :
PHP كود :
For i = 1 To 10
If i Mod 2 = 0 Then Continue For
ListBox1.Items.Add(i)
Next
نفس الكود السابق فيك تكتبه بطريقة أخرى بدون الحاجة لاستخدامها :
PHP كود :
For i = 1 To 10
If i Mod 2 <> 0 Then
ListBox1.Items.Add(i)
End If
Next
لكن إن كان هناك أكثر من بلوك في الحلقة فيبدوا استخدام الـ (Continue For) أكثر تنظيما من الحاجة لفتح وإغلاق عبارة (If --> End If)
حفظكم ا لله جميعا وبارك فيكم
سبحان الله عملت مثال مصغر لكي تتضح الاشكالية لكن لا ادري هل عرفت الحل ام لا
المثال مرفق اختبار رابط واحد وهو يخص عدد النودز في الصفحة و آخر مشاركة المشارك لا يساوي من قبله من حيث عنوان الوصول الى خاصية الـInnertext لاسمه.
فلا ادري هل ستقع اخطاء ان انا نقلته الى المشروع الرئيسي
و من لا يود تحميل المثال البسيط التالي الكلاس كامل:
كود :
Imports System.Threading
Public Class Form1
Dim th As Thread
Dim doc As New HtmlAgilityPack.HtmlDocument
Sub get_nods(url As String)
Dim html As String = IO.File.ReadAllText(url)
doc.LoadHtml(html)
Dim posts As HtmlAgilityPack.HtmlNodeCollection = doc.DocumentNode.SelectNodes("//div[@class='post classic ']")
Dim post As HtmlAgilityPack.HtmlNode = Nothing
Dim userinfo As HtmlAgilityPack.HtmlNode = Nothing
Dim attachs As HtmlAgilityPack.HtmlNodeCollection = Nothing
Dim x As Integer
ProgressBar1.Invoke(Sub() ProgressBar1.Maximum = posts.Count - 1)
For x = 0 To posts.Count - 1
Label1.Invoke(Sub() Label1.Text = "")
Label2.Invoke(Sub() Label2.Text = "")
Label3.Invoke(Sub() Label3.Text = "")
ProgressBar1.Invoke(Sub() ProgressBar1.Value = x)
userinfo = posts(x).SelectNodes("//div[@class='author_information']")(x)
post = posts(x).SelectNodes("//div[@class='post_body scaleimages']")(x)
If Not IsNothing(posts(x).SelectNodes("//fieldset//a[@class='attachembed']")) Then
attachs = posts(x).SelectNodes("//fieldset//a[@class='attachembed']")
End If
Label1.Invoke(Sub() Label1.Text = "Main_Post: " & vbNewLine & userinfo.InnerText)
Label2.Invoke(Sub() Label2.Text = "Main_Post: " & vbNewLine & post.InnerText)
If Not IsNothing(attachs) Then
Label3.Invoke(Sub() Label3.Text = "Main_Post: " & vbNewLine & "Attachs Count: " & attachs.Count)
Else
Label3.Invoke(Sub() Label3.Text = "Main_Post: " & vbNewLine & "Attachs Count: 0")
End If
Thread.Sleep(2500)
Next
Button1.Invoke(Sub() Button1.Enabled = True)
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim url As String = "E:/vb4arb/thread-10000.html"
th = New Thread(AddressOf get_nods)
Button1.Enabled = False
Label1.Text = "بدأ"
th.Start(url)
End Sub
End Class
الكود الاول اللذي استخدمه للوصول لاسم العضو او المستخدم:
كود :
"//div[@class='post_author scaleimages']//div[2]//a"
فهل الكود الجديد في هذه المشاركة هو الافضل ام لا؟
على كل حال ساجرب باذن الله
انا احتاج وقت طويل لكي اعرف الخطأ.
اسف على الاطالة
حفظكم الله تعالى