الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال عن مقارنة محتويات الملفات

مغلق
بدأه hamohd70 في 9 مايو 2003 · 17 رد · 1,358 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

ممكن .. الموضوع معقد او يحتاج الى تحديد بالضبط كيف سنحدد الكلمات ولكن هذا مثال سريع ...

ما رأيك؟

filecomapre.zip

#2

فعلاً

بيقولو لا تحتار مع مختار

و أنا أقول لا تحتار مع hamohd70;)

#3

بالفعل اخوي hamohd70 الكود شغال مية بالمية وهو ما احتاج بالضبط .. ما شاء الله عليك ورعاك .. الف الف الف شكر بصراحة

لكن الشيء الجيد ما بيكتمل للاسف :( .. ان كان حجم صفحة ال HTML ما يقرب من 28 كيلو فان البرنامج يتوقف عن الاستجابة .. توصلت الى هذا بعد ان قمت باستبدال ملف mdb.dat (حجمه 79 كيلوبايت) الذي يقوم الكود بمقارنة ما يحويه بمحتويات الصفحة لكن لم يكن منه فقمت باستبدال الصفحة التي استخدمتها (حجمها 28 كيلو) بتلك الصغيرة مع الكود ( تقريبا 2 كيلو) فسارت الامور على خير ما يرام ..

السؤال الان يكمن .. كيف يمكن التخلص من هذه المشكلة ..؟

هناك عدة حلول باعتقادي .. ما يخطر ببالي الان وهو ان اقوم بتقليل حجم صفحة ال HTML وذلك بالتخلص من اسطر معينة فيها والابقاء على ما اريد .. هذا يتطلب معرفة ارقام الاسطر المطلوب التخلص منها صح؟

طريقة اخرى قمت بتجربتها منذ قليل اعتقد تحل المشكلة .. وهي تحميل محتويات الصفحة في RichTextBox وعند النقر على الزر يقوم بالحصول على كلمات معينة من محتويات ال RichTextBox ووضعها في الليست

قمت بكتابة هذا الكود للحصول على تلك الكلمات حيث يقوم بالحصول على ما يتوسط حروف معينة ..:

Public Function GetName(Inp As String) As String



'<img src=http://www.msn.com/header.jpg border=0>



Dim chrOpen As String

Dim chrClose As String

Dim phrIMG As String

Dim phrSRC As String

Dim phrURL As String

Dim phrBORDER As String

Dim strFirst As String

Dim strLast As String



chrOpen = InStr(1, Inp$, "<")

chrClose = InStr(1, Inp$, ">")



phrIMG = InStr(1, Inp$, "<img" & Chr$(32))

phrSRC = InStr(1, Inp$, "src=")

phrURL = InStr(1, Inp$, "http://www.msn.com/")

phrBORDER = InStr(1, Inp$, ".jpg border=0")



strFirst = InStr(1, Inp$, "<img src=http://www.msn.com/")

strLast = InStr(1, Inp$, ".jpg border=0>")



If chrOpen Then

 If chrClose Then

  If phrIMG Then

   If phrSRC Then

    If phrURL Then

     If strFirst Then

      If strLast Then

          Inp$ = Mid$(Inp$, phrURL + 19)

          GetName$ = Mid(Inp$, 1, InStr(1, Inp$, ".") - 1)

      End If

     End If

    End If

   End If

  End If

 End If

End If



End Function

لكن هنا توقفت فليس لدي خبرة مع اللوائح والتكرار فيها ..

لاحظ صفحة page.htm يوجد فيها كودين للصور يتم وضع الاسم الاول في الليست لكن كيف يمكنني ان اعدل او اضيف على الكود السابق لجعله يقوم بوضع الاسم الثاني في الليست ايضا ..؟

ارجو ان اجد الحل لهذه المشكلة فمستقبل البرنامج يتوقف عليه :(

و شكرا مرة اخرى اخي الغالي hamohd70

(f)(f)(f)

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#4

بالفعل اخوي hamohd70 الكود شغال مية بالمية وهو ما احتاج بالضبط .. ما شاء الله عليك ورعاك .. الف الف الف شكر بصراحة

لكن الشيء الجيد ما بيكتمل للاسف :( .. ان كان حجم صفحة ال HTML ما يقرب من 28 كيلو فان البرنامج يتوقف عن الاستجابة .. توصلت الى هذا بعد ان قمت باستبدال ملف mdb.dat (حجمه 79 كيلوبايت) الذي يقوم الكود بمقارنة ما يحويه بمحتويات الصفحة لكن لم يكن منه فقمت باستبدال الصفحة التي استخدمتها (حجمها 28 كيلو) بتلك الصغيرة مع الكود ( تقريبا 2 كيلو) فسارت الامور على خير ما يرام ..

السؤال الان يكمن .. كيف يمكن التخلص من هذه المشكلة ..؟

هناك عدة حلول باعتقادي .. ما يخطر ببالي الان وهو ان اقوم بتقليل حجم صفحة ال HTML وذلك بالتخلص من اسطر معينة فيها والابقاء على ما اريد .. هذا يتطلب معرفة ارقام الاسطر المطلوب التخلص منها صح؟

طريقة اخرى قمت بتجربتها منذ قليل اعتقد تحل المشكلة .. وهي تحميل محتويات الصفحة في RichTextBox وعند النقر على الزر يقوم بالحصول على كلمات معينة من محتويات ال RichTextBox ووضعها في الليست

قمت بكتابة هذا الكود للحصول على تلك الكلمات حيث يقوم بالحصول على ما يتوسط حروف معينة ..:

Public Function GetName(Inp As String) As String



'<img src=http://www.msn.com/header.jpg border=0>



Dim chrOpen As String

Dim chrClose As String

Dim phrIMG As String

Dim phrSRC As String

Dim phrURL As String

Dim phrBORDER As String

Dim strFirst As String

Dim strLast As String



chrOpen = InStr(1, Inp$, "<")

chrClose = InStr(1, Inp$, ">")



phrIMG = InStr(1, Inp$, "<img" & Chr$(32))

phrSRC = InStr(1, Inp$, "src=")

phrURL = InStr(1, Inp$, "http://www.msn.com/")

phrBORDER = InStr(1, Inp$, ".jpg border=0")



strFirst = InStr(1, Inp$, "<img src=http://www.msn.com/")

strLast = InStr(1, Inp$, ".jpg border=0>")



If chrOpen Then

 If chrClose Then

  If phrIMG Then

   If phrSRC Then

    If phrURL Then

     If strFirst Then

      If strLast Then

          Inp$ = Mid$(Inp$, phrURL + 19)

          GetName$ = Mid(Inp$, 1, InStr(1, Inp$, ".") - 1)

      End If

     End If

    End If

   End If

  End If

 End If

End If



End Function

لكن هنا توقفت فليس لدي خبرة مع اللوائح والتكرار فيها ..

لاحظ صفحة page.htm يوجد فيها كودين للصور يتم وضع الاسم الاول في الليست لكن كيف يمكنني ان اعدل او اضيف على الكود السابق لجعله يقوم بوضع الاسم الثاني في الليست ايضا ..؟

ارجو ان اجد الحل لهذه المشكلة فمستقبل البرنامج يتوقف عليه :(

و شكرا مرة اخرى اخي الغالي hamohd70

filecompare.zip

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#5

فعلا سيتوقف البرنامج عن الاستجابه لانشغاله في ال loops ولا علاقه لحجم الملف بذلك ...

الحل هي ان ضيف DoEvents بداخل الloop .

جرب هذا...

filecomapre.zip

#6

اعتقد ان المشكلة قد حلت وارجو الا يكون حلها تم بشكل جزئي ..في البداية لم يحدث شئ ولم يظهر في الليست اي كلمة .. انتظرت لفترة دون جدوى .. لكن بعدها قمت باستبدال ملف mdb.dat الذي اقوم بالعمل عليه بالملف dat.dat المرفق مع الكود وصفحة ال HTML هي ذات ال 28 كيلو فنجح الامر ..

في هذه الحال يجب الانتظار فقط كي تظهر النتائج ان كان حجم الملف mdb.dat كبيرا قليلا ..

سؤال اخي hamohd70 هل يمكن جعل اظهار النتائج في الليست فوري كبرامج كشف الفيروسات مثلا .. فان تطابقت كلمة تم وضعها ثم يتابع الكود عمله ليبحث عما يليها ؟

ان كان الامر معقدا او يحتاج الى وقت لكتابة الكود فلا تزعج نفسك ما قصرت ابدا اخي .. والشكر الحار لك

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#7

يبدو انه يقوم بالفعل باظهار السطر عند التطابق ويتابع لما يليه ككواشف الفيروسات ..

.. استفساراتي يبدو انها لن تنتهي ..

استفسارين : 1- هل يمكن جعل المطابقة بين الملفين casesensitive ? (لاحظ في الملف المرفق لمعرفة السبب حيث يتم وضع اي كلمة طالما تطابقت الحروف الاولية ! وهذا مرفوض بتاتا فكيف يمكن جعله يطابق الكلمة كاملة فان وجدت يرصفها) + ان تكرر احد السطور الناتجة فان البرنامج يتجاهله.

2- ايضا في الملف المرفق .. بعد انتهاء عملية البحث اود ان اقوم بانشاء صفحة html مثلا تحوي قائمة مرتبة تعتمد على الليست .. بمعنى

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

السطر الثاني في رابط 2 وهكذا

ارجو الا تكون طلباتي كثيرة ومزعجة وشكرا لك .. دوما :)

اخوك NOP

list.zip

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#8

لا مشكله على الاطلاق ...

الكود الذي اعطيتك اياه كان من المتوقع ان يكون بطيئأ بسبب الكود المستخدم و لكن سأحاول ان اجعلة سريعا....

اقتباس
الموضوع معقد او يحتاج الى تحديد بالضبط كيف سنحدد الكلمات

هذا متوقع جدا ما تسأل عنه الآن..سأحاول ان اجيب طلباتك ولكن احتاج الى الراحه اولا ثم نستأنف العمل.

#9

وانا شاكر جدا جدا لك مجهودك الجبار ومساعداتك القيمة جدا (f)(gift)

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#10

جرب الملف المرفق مع اي حجم تريد وان حدثت مشكلة ارفق الملف مع البرنامج لكي اعمل عليه التجارب مباشرة..

ثانيا: لاحظ ان الملف الاول الذي يجب فتحه هو الملف الذي يحتوي على keywords بينما الثاني سيكون الملف الذي ستبحث فيه...

تحياتي..

list.zip

#11

بصراحة اقل ما يمكن ان اقول هو الشكر الجزيل لك اخي hamohd70 بالفعل البحث صار سريع بشكل واضح جدا ولا يؤدي الى انقاص مصادر النظام ابدا ..

كل شئ تمام ويعمل بكفاءة والحمد لله

بالنسبة للصفحة التي يتم انتاجها .. فان ما يتطابق من كلام يتم وضعه لكن التطابق لا يكون بنسبة 100% فكلمة align مثلا يتم وضع ali في الصفحة فهل يمكن جعلها حساسة لحالة الاحرف ؟

(راجع الملف المرفق)

تحياتي الحارة لك (f)(f)(f)

case.zip

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#12

لم تصادفني هذه المشكله ::

Align ليست align و ليست ali او Ali لأن المقارنه في الvb اصلا case sensitive الا اذا تم طلب عكس ذلك...

#13

:eek: غريبة .. ساتاكد اكثر من مرة ,, شكرا على الرد اخي hamohd70 والف شكر على مساعداتك الجد قيمة(f)

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#14

شاهد بنفسك .. (ملحوظة: لم اقم بقلب اسماء الملفات كما اخبرتني المرة السابقة لان كود البرنامج الذي اعمل عليه طويل والتغيير كان سيتطلب وقت طويل فتركته كما هو واشتغل بدون مشاكل .. فهل هذا هو سبب المشكلة هذه ؟)

case.zip

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#15

هذا الملف بعد التعديل...

case.zip

#16

لاحظ اني غيرت الكود لصنع ملف htm من append الى output و السبب ان هو الرغبه في صنع ملف جديد ... والخيار لك و لما تراه طبعا حسب حاجتك..

كما ان كود البحث و المقارنه سيعمل مع ما يمكن ان نسميه standard words اي تلك التي تحتوي على احرف فقط اما اذا تم استخدام ارقام او علامات مثل $ او # فلن يعمل كما يجب... لهذا اخبرتك ان الكود معقد نوعا ما و يحتاج الى مناقشه لكتابه ما تريد بالضبط..

#17

ما شاء الله اخوي والله يزيدك من علمه اكثر واكثر ووفقك في خطاك .. الشكر قليل جدا جدا جدا ..

يمكنك القول بان لك 90% من شغل البرنامج :o لكن كما يقال ومنكم نستفيد .. (والله صرت استحي يكون مسماي عضو محترف وانت نفسه على العكس بالفعل تستحق مسمى اخر اعلى او ان يخفضوا مسماي ولن اغفل عن تبليغ المشرفين بهذه المساعدة القيمة المتتابعة)

تحياتي واحترامي (f)

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#18

:)

هذا الموضوع مغلق.

مواضيع مشابهة