تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[كود] كيف يتم التعديل على كل الروابط وليس اخر رابط موجود
#1
اخواني الاعزاء .. لدي هذا الكود
كود :
If My.Computer.FileSystem.FileExists(lbldir.Text & "threads\thread_" & a & ".htm") = False Then
                Dim inputString As String = page
                'كود فحص النص عن الروابط
                Dim regex As New Regex("(<a href=)(.*)(</a>)", RegexOptions.IgnoreCase)
                Dim amatch As Match = Nothing
                Dim col As MatchCollection = regex.Matches(inputString)
                Dim nat As String = ""
                Dim ma As String = ""
                For Each amatch In col
                    'ان عادت الجملة for بنتيجة يكون التالي:

                    'اذا احتوى الرابط على رابط مرفق وهو attachment.php"aid=
                    If amatch.ToString.Contains("attachment.php?aid=") Then


                        'نكتب رابط جديد بحيث يحوي فقط اسم الملف المرفق لانه يتم تحميله مع الصفحة بنفس المجلد
                        nat = "<a href=" & afn & ">" & afn & "</a>"
                        'اسناد نتيجة الفحص لمتغير جديد
                        ma = amatch.ToString

                        ' MsgBox(afn)


                    End If

                Next

                Dim nm As String = ""
                If ma.ToString.Contains("attachment.php?aid=") Then
                    'ان احتوى نتيجة الفحص على رابط مرفق يتم الاستبدال مع رابط جديد الذي يحوي فقط اسم الملف المرفق
                    nm = page.Replace(ma, nat)
                Else
                    'او يسند له بدوت تغيير
                    nm = page
                End If
                '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                                 'هذا هو محتوى الصفحة بعد عمل التعديل لرابط المرفق


                My.Computer.FileSystem.WriteAllText(lbldir.Text & "threads\thread_" & a & ".htm", nm, False, encoding:=System.Text.Encoding.Default)
                p1.Value += 1
                lbl.Text += 1
                lblurl.Text = st.Text & "showthread.php?tid=" & a
                a -= 1





            Else
                p1.Value += 1
                lbl.Text += 1
                lblurl.Text = st.Text & "showthread.php?tid=" & a
                a -= 1

            End If



ادري ان الكود طويل لكن ارجو النظر فيه ومعرفة لماذا يتم فقط تعديل اخر رابط بالصفحة
يعني لو لدينا صفحة فيها عدة روابط للمرفقات فانه بناء على هذا الكود يتم استبدال اخر رابط ولو لم يوجد الا مرفق واحد يتم العمل
كيف اعدل على الكود ليتم العمل بشكل صحيح
يعني اظن ولا ادري انه لغز بسيط بالنسبة لكم لكنه اتعبني
الرد }}}
تم الشكر بواسطة:
#2
أخي سعود ما أقول إلا انك معقد نفسك بالRegas

لو استعملت طريقتي كنت ريحت نفسك
الرد }}}
تم الشكر بواسطة:
#3
إقتباس :لو استعملت طريقتي كنت ريحت نفسك
بس ياخوي الاداة ليست مرنة او اني لم اتمكن من تطويعها
الرد }}}
تم الشكر بواسطة:
#4
(14-10-13, 01:33 AM)سعود كتب :
إقتباس :لو استعملت طريقتي كنت ريحت نفسك
بس ياخوي الاداة ليست مرنة او اني لم اتمكن من تطويعها


هل مرنة بشكل كبير

وانا اتعامل معاها منذ زمنرطويل فيما يخص Html


شوف هذي الردود الى كتبتها كلها اعتمدت على الاداة

لو اني استخدمت الRegex كان الكود صار طويل ونتيجته غير مضمونة



1
http://vb4arb.com/vb/showthread.php?tid=...41#pid1541

2
http://vb4arb.com/vb/showthread.php?tid=...61#pid1761

3
http://vb4arb.com/vb/showthread.php?tid=...24#pid2524


شوف الردود وعطني رايك (هل يمكنك عمل هذه البرامج بكود قصير باستعمال Regex ؟)

--

بأكواد بسيطة يمكنني عمل استخلاص واستبدال وتعديل مااريده من صفحة html

فلا تقارن regex ب HtmlAligityPack من ناحية التعامل Html
الرد }}}
تم الشكر بواسطة:
#5
عدلت بالكود وصار العكس يحمل اول مرفق ويستبدل الرابطSadSadSad

صدقني كلها سوى بالصعوبةSmile

بعدين الرابط اللي هنا
http://vb4arb.com/vb/showthread.php?tid=...61#pid1761
هذا لو صار الرابط كله معلوم
لكن لو حبيت العملية تتم بشكل اوتوماتيكي اظن ستحتاج .....
الرد }}}
تم الشكر بواسطة:
#6
(14-10-13, 02:21 AM)سعود كتب : عدلت بالكود وصار العكس يحمل اول مرفق ويستبدل الرابطSadSadSad

صدقني كلها سوى بالصعوبةSmile

بعدين الرابط اللي هنا
http://vb4arb.com/vb/showthread.php?tid=...61#pid1761
هذا لو صار الرابط كله معلوم
لكن لو حبيت العملية تتم بشكل اوتوماتيكي اظن ستحتاج .....

اي رابط قصدك

تدري .. انا اسحب ايدي من هالموضوع .. اتعقدت نفسيا !!!

لحد الان من موضوعك الاول انا موفاهم ويش قاعد تسوي !!
الرد }}}
تم الشكر بواسطة: سعود
#7
السلام عليكم ورحمة الله وبركاته

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

هذا كود المرفقات

كود :
<a href="[align=left]attachment.php?aid=304[/align]" target="_blank">SaveAttachment.zip</a>

نأتي لصيغة الـ Regex

كود :
attachment\.php\?aid=[0-9]{1,}" target="_blank">

ثانيا بعد وضع قاعدة Regex ، نقوم بعمل حلقة تكرارية للبحث في كامل الكود بالكود التالي

كود :
Dim Reg As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex("attachment\.php\?aid=[0-9]{1,}"" target=""_blank"">")
For Each Reg0 As System.Text.RegularExpressions.Match In Reg.Matches(html)
'
'
'
'
Next

ثالثا/ داخل الحلقة التكرارية نقوم باستخلاص الروابط - إن وجدت - طبعا نحن لا يهمنا إلا النص التالي

كود :
attachment.php?aid=304

وطريقة استخلاصه تكون بهذا الكود

كود :
Dim AttachLink As String = html.Substring(Reg0.Index, Reg0.Length).Split("""")(0)

الآن نقوم بتحميل المرفق بعد إضافة إليه النص http://vb4arb.com/vb/

وأخيرا نأتي إلى استبدال الرابط داخل صفحة الانترنت برابط المرفق على الجهاز
على فرض أننا قمنا بتسمية المرفق s.zip فنكتب
كود :
html = html.Replace(AttachLink, "s.zip")

فيصبح الكود النهائي
كود :
Dim Reg As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex("attachment\.php\?aid=[0-9]{1,}"" target=""_blank"">")
        For Each Reg0 As System.Text.RegularExpressions.Match In Reg.Matches(html)
            Dim AttachLink As String = html.Substring(Reg0.Index, Reg0.Length).Split("""")(0)
            'تنزيل المرفق
            AttachDownload(AttachLink)
            html = html.Replace(AttachLink, "s.zip")
        Next
الرد }}}
تم الشكر بواسطة: سعود , الشاكي لله
#8
بارك الله فيك اخوي
هل يمكن اسم المرفق لتكتمل مع رابط المرفق
الرد }}}
تم الشكر بواسطة: sooriaty03
#9
السلام عليكم ورحمة الله وبركاته

تفضل أخي
هذا كود الدالة

كود :
Private Function AttachDownload(ByVal URL As String) As String
        Try
re:
            URL = "http://vb4arb.com/vb/" & URL
            'بدء اتصال جديد
            Dim Req As Net.HttpWebRequest = Net.HttpWebRequest.Create(URL)
            Dim Res As Net.HttpWebResponse
            'محتوى الكوكيز
            Req.Headers.Add("cookie", "محتوى الكوكيز")
            Res = Req.GetResponse

            Dim FileName As String = Res.Headers("Content-Disposition")
            If InStr(FileName, "filename") Then FileName = Strings.Right(FileName, FileName.Length - InStr(FileName, "=")) Else FileName = ""
            FileName = Replace(FileName, """", "")

            Res.Close()

            If Not FileName = Nothing AndAlso FileName.Trim <> "" Then
                'هذه الخطوة لفك ترميز اللغة
                Dim b() As Byte = (From C As Char In FileName.ToCharArray Select CByte(AscW(C))).ToArray
                FileName = System.Text.Encoding.UTF8.GetString(b)

                Dim client As New Net.WebClient
                client.Encoding = System.Text.Encoding.Default
                client.Headers.Add("cookie", "محتوى الكوكيز")

                client.DownloadFile(URL, "files\" & FileName)
                Return FileName
            Else
                'My.Computer.FileSystem.WriteAllText("log.txt", "File " & Id & " Not Found" & vbNewLine, True)
            End If
        Catch ex As Exception
            If ex.ToString.ToLower.Contains("not found") Then

            Else
                GoTo re
            End If
            MsgBox(ex.Message)
        End Try
        Return ""
End Function

وعدل الكود في المشاركة السابقة ليصبح على الشكل التالي

كود :
Dim Reg As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex("attachment\.php\?aid=[0-9]{1,}"" target=""_blank"">")
        For Each Reg0 As System.Text.RegularExpressions.Match In Reg.Matches(html)
            Dim AttachLink As String = html.Substring(Reg0.Index, Reg0.Length).Split("""")(0)
            html = html.Replace(AttachLink, AttachDownload(AttachLink))
        Next

بالتوفيق
الرد }}}
تم الشكر بواسطة: الشاكي لله


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  ارجو التعديل على الدالة المرفقة - الدالة تعيد الرقم -1 new_programer 4 91 20-03-24, 01:18 PM
آخر رد: تركي الحلواني
Exclamation [سؤال] كيف يمكن الغاء السوال عند الكتابة على ملف موجود dell 0 48 19-03-24, 01:23 AM
آخر رد: dell
  [VB.NET] مساعدة في استدعاء البيانات معينه من form الأول إلى form 2 بدون التعديل loay775 2 274 18-01-24, 05:04 PM
آخر رد: loay775
  [VB.NET] كود التعديل Abdellatif 6 396 21-12-23, 02:01 PM
آخر رد: Abdellatif
  كود التعديل لم ينجح معي melad2002 4 298 16-12-23, 12:22 AM
آخر رد: anes
  رجاء التعديل على الكود المرفق - كلاس لعرض كود المورد new_programer 4 357 13-10-23, 01:47 AM
آخر رد: new_programer
  اريد التعديل على كود اذا كان القيمة المدخلة مكررة بDataGridView يتم فقط زيادة العدد moh61 6 821 26-07-23, 10:41 AM
آخر رد: تركي الحلواني
  serialport غير موجود في القائمة toolbox aminesori 3 450 02-07-23, 10:47 PM
آخر رد: aminesori
  يرجي التعديل على المثال - تعبءة الكمبوبوكس داخل الجريد بانواع الوحدات new_programer 3 800 14-04-23, 05:31 PM
آخر رد: new_programer
  [VB.NET] اريد طريقة حساب فرق بين تاريخ موجود في لست فيو وتاريخ الجهاز mac9 4 708 11-04-23, 10:23 AM
آخر رد: mac9

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


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