Ahmos قام بنشر يونيو 5 قام بنشر يونيو 5 أخي الكريم بارك الله فيك 1- عندي استعداد وربنا يقدرني ويستخدمني 2- لو ممكن توضح التعديلات المطلوبة أكتر مع أمثلة 3- نعم يمكن وضع نمط للبحث وفي هذه الحالة انت لا تستهدف أرقام الكتب التي تأتي في مواضع متأخرة حاول توضيح المطلوب اكثر مع الذكر الحالات والأمثلة وإن شاء الله سنتمكن من الوصول لحل 4- ولقد حاولت في الكود الحالي ان يتعامل مع المتغيرات فيمكنك استدعائه من أي جدول ومع أي عمودين إذا كان لديك أي استفسار فلا تتردد أخي الكريم بانتظار توضيحك بالتوفيق 1
nssj قام بنشر يونيو 5 الكاتب قام بنشر يونيو 5 (معدل) بارك الله فيك أخي الكريم وأحسن إليك كما أشرت سابقا .. قد أحتاج إلى استخدام هذه الدالة لكتاب معين دون الحاجة للتعديل على جدول (books) أو (BooksList) في هذه الحالة سأستخلص الكتاب المطلوب من (books) لتعمل الدالة عليه وحده وستجد في الملف المرفق جدول (books) وفيه كتاب واحد فقط هو "معجم ابن عساكر" ولن تجد في الجدول اسم الكتاب لأن اسم الكتاب (الأول والثاني) ستأخذه الدالة من مربع النص في النموذج الذي سيظهر والأمر الأول: (تحديث MNO - بحث في الكل) يعني سيتخدم نفس طريقة البحث التي اعتمدناها بكل خطواتها وملحقاتها، الفرق الوحيد هو حصر البحث في اسم الكتاب الذي سيكتب في مربع النص (Txt1 – Txt2) ولن يأخذه من جدول (books) أو (BooksList) والأمر الثاني: (تحديث MNO - بعد الرقم مباشرة) نفس السابق من حيث البحث في كتاب واحد فقط، ويختلف في طريقة البحث، فلن يبحث عن رقم الحديث في كل النص، سيبحث عنه بعد اسم الكتاب مباشرة بفاصل (5) حركات مثلا، هي للمسافات والأقواس التي تفصل بين اسم الكتاب والرقم [معجم ابن عساكر (125) ، "سنن النسائي" (301)] فإذا لم يجد الرقم المطلوب بعد اسم الكتاب مباشرة فسيتوقف عن البحث وينتقل للتالي وعندها فلا حاجة لقائمة الكتب (BooksList) لمعرفة هل الرقم المطلوب بعد هذا الكتاب أو غيره، ومن الممكن ألا نحتاج لحذف ما قبل اسم الكتاب إذا كانت هناك طريقة لجعل مجال البحث بما بعد اسم الكتاب بحد معين Smart_Search_One.accdb تم تعديل يونيو 5 بواسطه nssj
hanan_ms قام بنشر يونيو 5 قام بنشر يونيو 5 لم افهم جزء في الدالة Public Function ClassifySpeed() As RequestSpeed Select Case elapsedTime Case Is < 500 ' Less than 500ms ClassifySpeed = TooFast Case 500 To 1000 ' Between 500ms and 1000ms ClassifySpeed = Fast Case 1000 To 5000 ' Between 1s and 5s ClassifySpeed = Normal Case 5000 To 15000 ' Between 5 seconds and 15 seconds ClassifySpeed = Slow Case Else ' Greater than 15 seconds ClassifySpeed = TooSlow End Select End Function من 0 الى 4 تستعمل لاي قياس ؟! اظن يوجد استعلامات ناقصة ======================= بعض الاقتراحات ان كانت مناسبة بدل من استخدام -DOA بتعديل وتشطيب ولكن عمل الدوال ممتع 😇 بناء جدول باسماء الكتب باجمالي السجلات 1 وجدول للاحاديث 2 هنا تفريع فريد اذا كان الرقم مطابق للحديث اضف A مع +1 =260A4 مع اضافة حقل لكافة الاسماء مثال ابن صياد 😇 وحقل اذا كان للحديث وصف فريد للبحث Link Nothing = Go 2-Link db كتاب آخر =========================== نجعل لكل كتاب قاعدة بيانات تناديها db () DOA rs ============================= ممكن بعض الشرح عن وظيفة الدالة اعلاها شكرا لكم🌹
Ahmos قام بنشر يونيو 6 قام بنشر يونيو 6 السلام عليكم ورحمة الله وبركاته أخي الكريم @nssj تم بحمد الله العمل علي التعديلات المطلوب الملف بالمرفقات كما تم التعديل علي بعض الأكواد سأحاول تغطية التعديلات وإن كان هناك أي استفسار أو طلب أخر فلا تتردد بانتظار التجربة والإفادة 1- فيما يخص التعديل الأول فما أردته هو ان يتم كل شي فالبحث كما هو ولكن فقط أردت تثبيت اسم الكتاب وعليه تم التعديل في الكود نفسه ليتضمن هذا الاحتمال دون أن يتأثر القديم فكانت التعديلات هي إضافة (Optional constName As Boolean = False) حتي يتم التمييز إذا كان اسم الكتاب ثابت ام متغير وبشكل افتراضي هي False فالاختيار الأساسي هو ان الاسم متغير يعتمد علي خانة اسم الكتاب بالجدول وهذا ما تم تعديله علي الكود If constName = False Then BookName = Nz(Trim(.Fields(bookNameCol)), "") Else BookName = Trim(bookNameCol) End If كما يجب التنبيه ان هذا الكود يعتمد بشكل أساسي علي الجدول TAB ومحتوياته بما فيها wipedNass تم التعديل علي (createBooksCollection) تم إضافة تحقق إذا كان العمود الثاني موجود لإضافة ما فيه وللعلم فالمطلوب لعمل هذا الكولكشين هو جزء يميز اسم الكتاب مثال اذا كان الكتاب الاسم الأول معجم ابن عساكر والثاني ابن عساكر في معجمه فيكفي ان يكون الاسم ابن عساكر في البحث او الاستبعاد ----------------------------------------------------- فيما يخص الطلب الثاني فقد تم عمل المطلوب بهذه الطريقة Public Function isBookInText(ByVal fullText As String, _ ByVal BookName As String, _ Optional ByVal bookNum As String = "") As Boolean On Error GoTo ErrorHandler Dim regex As Object Dim matches As Object Dim match As Object Dim pattern As String Set regex = CreateObject("VBScript.RegExp") If bookNum = "" Then pattern = "(?:" & BookName & "\s*-?\s*\(\d+(?:[/\\,\-_]\d+)*\))" Else pattern = "(?:" & BookName & "\s*-?\s*\(" & bookNum & "\))" End If With regex .Global = False .MultiLine = True .IgnoreCase = False .pattern = pattern End With Set matches = regex.Execute(fullText) If Not matches Is Nothing And matches.count > 0 Then ' Debug.Print "Book(s) found in text:" ' For Each match In matches ' Debug.Print " - " & match.Value ' Next isBookInText = True Else isBookInText = False End If CleanAndExit: If Not regex Is Nothing Then Set regex = Nothing If Not matches Is Nothing Then Set matches = Nothing Exit Function ErrorHandler: Debug.Print "Error: " & Err.Description isBookInText = False Resume CleanAndExit End Function فهذه الدالة يمكن استخدامها للبحث عن الكتاب برقم او بدون رقم وهي تبحث داخل النص وفق هذه الشروط اسم الكتاب يتبعه أي عدد من المسافات - او بدون ثم أي عدد من المسافات ثم ( ثم رقم مع فواصل او بدون ثم ) إذا تم تحديد نص للرقم اسم الكتاب يتبعه أي عدد من المسافات - او بدون ثم أي عدد من المسافات ثم ( النص المحدد ) هذا السطر من الكود (.Global = False) اذا كنت تريد للبحث ان يتوقف بعد اول نتيجة تم عمل هذه الدالة لتعود بـ True or False ولكن يمكن التعديل عليها لتعود بكامل النص مثلاً او تعود بالكتب الموجودة داخل النص التي ينطبق عليها الشروط السابقة تم تطبيق فكرة هذا التعديل للبحث برقم او بدون رقم في الملف المرفق تم إضافة كود لعمل تحديث للفورم قبل التنفيذ حتي يتأثر بالمتغيرات علي مربع النص بالتوفيق Smart_Search_Nssj_V6.zip 1
Ahmos قام بنشر يونيو 6 قام بنشر يونيو 6 الأستاذة / حنان @hanan_ms قمت بعمل مديول لحساب الوفق بشكل عام وأضفت له هذه الدالة Public Function ClassifySpeed() As RequestSpeed لقياس سرعة استجابة الاتصال بالأنترنت لجلب معلومات علي سبيل المثال عن طريق oXMLHttp = CreateObject("MSXML2.ServerXMLHTTP") وبالطبع يمكن التعديل والإضافة علي القيم إذا كان هناك قاعدة لتمييز الوقت المحدد للاستجابة
nssj قام بنشر يونيو 6 الكاتب قام بنشر يونيو 6 أحسن الله إليك أخي الكريم بخصوص التعديل الأول: البحث بنفس الطريقة لكن باعتبار كتاب واحد فقط، فقد تم الأمر بحمد الله أما التعديل الثاني ، فلفت نظري قولك: 3 ساعات مضت, Ahmos said: اسم الكتاب يتبعه أي عدد من المسافات - او بدون ثم أي عدد من المسافات ثم ( ثم رقم مع فواصل او بدون ثم ) فقمت بتغير : معجم ابن عساكر (142) إلى: معجم ابن عساكر 142 – فلم تجده الدالة لذلك فالبحث ينبغي أن يكون عن الرقم بعد اسم الكتاب بغض النظر عما بينهما من الأقواس والمسافات فالكتب تختلف في طريقة ترقيمها، ففي بعضها: كتاب ((55)) & كتاب 152 - & كتاب 152- & كتاب [47] & كتاب 35، & كتاب "29" ففي تصوري أن البحث سيكون عن الرقم بعد اسم الكتاب بمسافات أو بدون مسافات إلى أول رقم يعني ألا يشترط وجود شيء قبل الرقم أما نهاية البحث فهي: مسافة أو أي شيء غير الأرقام بما في ذلك: ) ] ، - _ يعني: اسم الكتاب يتبعه أي عدد من المسافات - او بدون ثم أي عدد من المسافات ثم رقم أو أرقام بدون فواصل فإذا تم الفصل بمسافة أو أو شيء غير الأرقام ينتهي البحث ثم ماذا قصدت أخي الكريم بقولك 3 ساعات مضت, Ahmos said: تم تطبيق فكرة هذا التعديل للبحث برقم او بدون رقم في الملف المرفق ماذا يعني هذا الخيار وما تأثيره على النتائج ؟
nssj قام بنشر يونيو 6 الكاتب قام بنشر يونيو 6 4 ساعات مضت, Ahmos said: فيكفي ان يكون الاسم ابن عساكر في البحث او الاستبعاد ليس بالضرورة أخي الكريم 🙂، فقد يجتمع في الحديث الواحد: ابن عساكر في معجمه & ابن عساكر في تاريخه & ابن عساكر في جزئه البيهقي في سننه & البيهقي في الشعب & البيهقي في الأربعين
Ahmos قام بنشر يونيو 6 قام بنشر يونيو 6 مساكم الله بالخير والنور والسرور فيما يخص التطبيق 1- يبحث بإسم الكتاب من مربع النص والرقم من الجدول 2 - يبحث بإسم الكتاب فقط بدون الرقم هي فقط تجربة للأنتقال غلي المرحلة التي تليها فالتفكير كنت بفكر بصوت عالي 😄 وبعدين فكرت ان احنا ممكن نعمل نمط يتتبع اسماء الاكتب وأرقمها فممكن مثلاً في الجدول TAB نضيف عمود نستخرج في من النص الكتب الموجودة فيه بس ده هيحتاج اننا يكون معانا كل اسماء الكتب وكل الطرق اللي ممكن تورد بيها *معلومة عند إنشاء دالة تتبع النمط بـ Regex يمكن وضع أكثر من نمط كبدائل ان لم يجد هذا النمط يبحث عن أخر عموماً ده لو هيساعد معاك ممكن نشتغل عليها بس حاول توفرلي الانماط عشان ابداء اشتغل علي الدالة وأختبرها إن شاء الله وبعد كدا نشوف هنشغلها ازاي مع أسماء الكتب صورة من التطبيق الثاني : 😁 5 ساعات مضت, nssj said: ليس بالضرورة أخي الكريم 🙂، فقد يجتمع في الحديث الواحد: ابن عساكر في معجمه & ابن عساكر في تاريخه & ابن عساكر في جزئه البيهقي في سننه & البيهقي في الشعب & البيهقي في الأربعين شكراً علي التوضيح ده علي الاقل في كولكشين الاستبعاد ممكن بدل ما نكتب 3 بدائل نكتب عساكر او البيهقي ده لو متاح انا بحاول اوصل الفكرة بعض الأسئلة 1- هل في قائمة بجميع الكتب وبدائلها 2- هل يوجد قائمة بأسماء الكتب وأرقامها 3- هل العمود MNOX ده موجود وانت بتحاول تصححه 4- متي سننتقل للبحث بأرقام الصفحات والاحتمالات الاخري ؟ ملحوظة : الان جميع الاكواد التي تعمل تعمد بشكل أساسي في التحقق من MNO أولاً فاذا كان موجود تنتقل اللي السجل التالي فقط إذا كان فارغاً تعمل وهذا توفيراً للوقت وخاصةً عن البحث باسم بديل فحتي لا يبدأ من جديد مع كامل القائمة يذهب فقط إلي الخانات الفارغة علي أي حال كل هذا يمكن تعديله فقد كنت حريصاً علي أنت تصل الي ما تريده وتطمئن إلي ان والحمد لله الأمر ممكن تحقيقه بفضل الله اذا كنت بحاجه إلي تعديل أي شئ فلا تتردد بالتوفيق 1
nssj قام بنشر يونيو 6 الكاتب قام بنشر يونيو 6 منذ ساعه, Ahmos said: هل في قائمة بجميع الكتب وبدائلها (BooksList) فيه أسماء الكتب وبدائلها وأرقامها التي هي مجال البحث أما قائمة بأسماء كل الكتب التي ترد في (TAB) فلا يوجد، ومن الصعب حصرها، وبعضها يذكر مختصرا مثل: طب، هق، ك، كر، طس، شعب .. ، وهذه الأحرف تتكرر كثيرا في النص، مما يجعل البحث عنها وتمييزها صعب جدا منذ ساعه, Ahmos said: هل العمود MNOX ده موجود وانت بتحاول تصححه غير موجود ، أضفته مؤقتا لإجراء التجارب، وأنا أحدثه يدويا .. لذلك فإن إعداد ملف للتجارب يأخذ وقتا منذ ساعه, Ahmos said: متي سننتقل للبحث بأرقام الصفحات والاحتمالات الاخري ؟ أنا أعد ملفا خاصا لهذا الغرض 🙂 .. ولكن بعد أن نسدل الستار عن الخطوة الأولى: البحث عن رقم الحديث. بقي تعديل واحد هو الذي ذكرته في المشاركة السابقة 7 ساعات مضت, nssj said: البحث ينبغي أن يكون عن الرقم بعد اسم الكتاب بغض النظر عما بينهما من الأقواس والمسافات فالكتب تختلف في طريقة ترقيمها، ففي بعضها وهذا التعديل بوضع حد ينتهي عنده البحث وينتقل للتالي قد يساعد في موضوع الصفحات
Ahmos قام بنشر يونيو 6 قام بنشر يونيو 6 أخي الكريم تفضل هذا النمط إن شاء الله يتضمن الاحتمالات الممكنة pattern = "(?:" & bookName & "\s*[|_/\\ -]*\s*[\s*|'\(\[\{""]*" & bookNum & "[\s*|'\)\]\ -}""]*)" يتم استبداله هنا بانتظار تجربتك للعديد من الاحتمالات وإذا قمت بتنشيط هذا الجزء من نفس الكود فيمكنك اختبار الدالة هكذا وستطبع النتيجة Sub testIsBookExist() Dim inputText As String Dim bookName As String Dim bookNum As String bookName = "المطالب" bookNum = "3298" inputText = DLookup("[NASS]", "TAB", "[MNO]=33976") inputText = Replace(inputText, "(", "|(") inputText = Replace(inputText, ")", " )''") If isBookInText(inputText, bookName, bookNum) Then Debug.Print "YES" Else Debug.Print "NO" End If End Sub أرجو من الله التوفيق والسداد 1
nssj قام بنشر يونيو 6 الكاتب قام بنشر يونيو 6 جزاك الله خيرا أخي الكريم وأحسن إليك تم الأمر بحمد الله .. وبهذا نكون قد أنهينا ما يتعلق بالبحث عن الكتب بأرقام الأحاديث، والحمد لله أولا وآخر والآن جاء دور البحث عن الكتب بأرقام الصفحات أو الجزء والصفحة وهذه المجموعة فيها تعقيدات أكثر من سابقتها والبحث فيها سيكون بنفس الطريقة المعتمدة السابقة، من حيث اختيار اسم الكتاب من نموذج فإن لم يكن فمن عمود الكتب .. لا تعديل في هذا الأمر الاختلاف سيكون بأن البحث القديم كان بالاعتماد على رقم (B_HNO) أما الآن فسيكون بالاعتماد على عمودي: (Part) و (Page) أو أحدهما وهنا تكمن أول إشكالية .. فقبل إعداد ملف التجربة أردت أن آخذ رأيك في هذه القضية: الكتب التي تخرج بالاعتماد على الصفحات نوعان: 1 - الأول وهو الأكثر يذكر الجزء والصفحة بفاصل / بمسافة أو بدون مسافة [ (1/ 25)، ( 3 /7 ) ، 5/ 99 ، 6 /59] 2 - الثاني يذكر الصفحة فقط بعد حرف (ص بمسافة أو بدون مثل: [ (ص 25)، (ص66) ( ص 126) ] هذا كله في جدول (TAB) أما في جدول (BOOKS) فإن عمود (Part) لا يكون فارغا، وحتى في هذه الكتب التي لا يذكر فيها رقم الجزء ويستعاض عنه بـ (ص ) فرقم الجزء فيها (1) يعني لا يوجد ما يميزها وأعتقد أنه لا بد من تمييز مثل هذه الكتب عند البحث، لأن الدالة عندما تريد أن تبحث عن مثل هذه الكتب فهي لن تبحث عن رقم الصفحة يعد [ 1/ ] بل بعد (ص وأنا أستطيع تمييز مثل هذه الكتب، إما بأن أغير رقم الجزء فيها مؤقتا إلى (0)، أو بإضافة حقل خاص بصيغة (نعم أو لا) لتمييزها، بحيث أن الدالة إذا وجدت رقم (0) في عمود الجزء، أو علامة (نعم) في الحقل الخاص فستبحث عن (ص بدل البحث عن رقم الجزء فما هو الأنسب .. تغيير رقم الجزء إلى (0) أو تمييز هذه الكتب بعلامة في حقل خاص ؟ بانتظار رأيك لأعد الملف مع باقي التفاصيل
Ahmos قام بنشر يونيو 7 قام بنشر يونيو 7 السلام عليكم ورحمة الله وبركاته اللهم لك الحمد كله، ولك الشكر كله، ولك الملك كله، وبيدك الخير كله، وإليك يرجع الأمر كله؛ علانيته وسره أوله وأخره، ظاهره وباطنه...لك الحمد يا مالك الملك في الأولى والآخرة، حمداً دائمًا طيبًا نقيًا مباركًا فيه؛ يملأ السماوات والأرض وما بينهما، كما ينبغي لجلال وجهك وعظيم سلطانك بسم الله ولا حول ولا قوة إلا بالله وعلي الله توكلنا وهو نعم المولى ونعم النصير كما فهمت انك ستقوم بالتمييز يدوياً ماذا لو كمنا بإعداد عمو في جدول TAB مثل wipedNass نقوم في باستبدال ص إذا جاءت منفردة او بعد ( مثلاً بـ 1/ وبهذه الطريقة نكون قد وحدنا النص كما يمكنك إعداد بعض النصوص كعينة للتجربة وإرسالها مع الإشارة الي مواضع البحث او النتائج المتوقعة حتي تتضح الفكرة أكثر عن التحديات والاحتمالات لدي فكرة وأحتاج إلي مساعدتك بجانب ما نقوم به اريد ان نستفيد من هذه البيانات كان نبدء في كل عملية بحث بتكوين قائمة بالكتب مثلاً الأن وجدنا تتطابق لإستخراج الـ MNO ماذا لو جمعنا القيم البحثية وهي اسم الكتاب والرقم وفي خطوة لاحقه سنجد ان قاعدة البيانات تحتوي علي MNO واسم كتاب ورقمه فنقوم بعمل دليل ان هذا الرقم يحتوي علي هذه الكتب طبعاً انا بفكر معاك بصوت عالي انا مش عارف انت شغال علي ايه بالظبط لكن عايز تفكر ازاي تقدر تستفيد من البيانات اللي بتوصلها بحيث متعرفش ان ممكن تحتاجها ازاي بما انك ماشي فالداتا بتحللها وتظبطها يعني قصدي ان لو في حاجه نقدر نعملها واحنا ماشين ومش هتعطلنا ممكن نعملها 1
nssj قام بنشر يونيو 7 الكاتب قام بنشر يونيو 7 5 ساعات مضت, Ahmos said: ماذا لو كمنا بإعداد عمو في جدول TAB مثل wipedNass نقوم في باستبدال ص إذا جاءت منفردة او بعد ( مثلاً بـ 1/ فكرة جيدة أخي الكريم .. ولكن لا بد أن يكون الاستبدال بشرط إذا ورد بعدها بمسافة أو بدون رقم حتى لا يتم استبدال أمثال: (صلى الله عليه وسلم) (صليت خلف .. (صحيح .. مع احتمال وجود مسافة بين القوس وص ( ص وأنا من باب الاحتياط، ففي الملف المرفق كتابان (أمالي الشجري) (الأربعين للبكري) ميزت بعلامة في حقل (sad) لأنه بطريقة (ص ) والآن أذكر بعض التفاصيل التي لم أذكرها في المشاركة السابقة البحث في كتب الصفحات (1/ 187) (2 / 66) 3 / 44 (ص 94) سيكون بنفس الطريقة المعتمدة السابقة، من حيث اختيار اسم الكتاب من نموذج فإن لم يكن فمن عمود الكتب .. لا تعديل في هذا الأمر الاختلاف سيكون بأن البحث القديم كان بالاعتماد على رقم (B_HNO) أما الآن فسيكون بالاعتماد على عمودي: (part) و (Page) وبما أننا سنعتمد نفس إجراءات البحث السابقة فلن تواجهنا مشكلة البحث عن الرقم كاملا، ومشكلة وجود الرقم قبل اسم الكتاب أو بعده ولكن لكتاب آخر لكن توجد إشكاليات خاصة بهذه الطريقة: ** الإشكالية الأولى: وهي في هذه الأمثلة في (TAB): أمالي الشجري (2/ 132-133) ، الأربعين للبكري (ص 38-39) وهما في جدول (BOOKS) لا مشكلة عندما تحد الدالة عن صفحة (132) أو صفحة (38) لأن الدالة ستجدهما أولا، ثم إذا تابعت البحث فستجد أيضا صفحة (133) وصفحة (39) ولهما رقم (MNO) مختلف والأمر هنا هين، لأن الدالة ستضع الرقم الذي تجده أولا في (MNO)، وهو المطلوب * المشكلة الأكبر عندما تبحث الدالة عن الحديث التالي: الشجري 1 / 133، البكري (ص 39) فعندما تبحث الدالة عن (الأربعين للبكري) صفحة (39) في (Tab)، قد تجد أولا الحديث الذي فيه: الأربعين للبكري (ص 38-39) وهي ليس المطلوب وإذا تابعت البحث ستجد المطلوب: الأربعين للبكري (ص 39) ولكل منها رقم (MNO) مختلف وكذلك الحال في أمالي الشجري جزء (2) صفحة (133) قد تجد أولا النتيجة غير المطلوبة: أمالي الشجري (2/ 132-133) وإذا تابعت البحث ستجد النتيجة الصحيحة: أمالي الشجري (2/ 133) وفي الحالتين ستضع الدالة في (MNO) الرقم الأول الذي وجدته، وليس هو الرقم المطلوب فهل سنبحث عن طريقة لحذف مثل هذه الأرقام كما فعلنا في مثل [مصنفات ابن البختري 147 - (55)] أم يمكن تجاوز الأمر بطريقة أخرى، أم لا بد من وجود هذا الخلل والتعامل معه لكونه قليل الحدوث ثم هل ستعمل الدالة في مثل: أمالي الشجري (1/ 16، 2/ 46) ** الإشكالية الثانية: وجود أكثر من حديث في الصفحة الواحد، ولكل حديث رقم (MNO) فهذه الأحاديث الأربعة ستبحث عنها الدالة بصيغة: أمالي الشجري (1/ 60) وستجدها في أربعة مواضع من (TAB) لكل موضع رقم (MNO) وبما أن الدالة تحتفظ بجميع النتائج وتضعها في حقل (allFoundMNO) فلا بأس بذلك، لكن إن أمكن أن توضع هذه النتائج في حقول منفصلة معدة لذلك مسبقا فهو أفضل، سواء بنفس الكود أو بكود منفصل وأهمية ذلك عندي، أني سأستخدم نموذجا يعرض الحديث من (TAB) بمجرد النقر المزدوج على الرقم، وبذلك سأستعرض هذه الأحاديث بسرعة وعندما أجد المطلوب أعتمد رقمه وقد أضفت ستة أعمدة لهذا الغرض في (BOOKS) لاستيعاب سبعة أرقام مع الحقل الرئيسي (MNO) لأني أستبعد أن توجد في مجموعة الكتب صفحة يوجد بها أكثر من سبعة الأحاديث في صفحة واحدة هذا ما خطر على بالي من إشكالات .. وقد تظهر إشكالات أخرى عند التجربة .. والله الميسر بالنسبة لاقتراحك أخي الكريم 5 ساعات مضت, Ahmos said: ماذا لو جمعنا القيم البحثية وهي اسم الكتاب والرقم وفي خطوة لاحقه سنجد ان قاعدة البيانات تحتوي علي MNO واسم كتاب ورقمه فنقوم بعمل دليل ان هذا الرقم يحتوي علي هذه الكتب فلم أفهم بالضبظ ما تعني أخي الكريم وأنا أسمع كثيرا عن موضوع تحليل البيانات وإذا كان بإمكاني القيام بشيء لتسهيل عملي والحصول على أفضل النتائج فأنا حريص على ذلك وأنا تحولت لأكسس لهذا الغرض، فكل الملفات التي عندي كانت ملفات (وورد) وأنا الآن أعمل في بيئة أكسس لأستفيد من مزاياه إجمالا أخي الكريم .. دالة البحث الذكية التي طلبتها هنا هي على أهميتها بالنسبة لي وكونها ستوفر لي وقتا كبيرا .. فاستخدامي لها سيكون محدودا بكتب معينة، هي الكتب التي كانت موجودة لدي في ملفات (وورد) وأريد أن أربطها بقاعدة البيانات عبر (MNO) أما الآن وبعد أن أصبحت أستخدم أكسس وليس (وورد) فكل الكتب والأحاديث الجديدة التي أتعامل معها أدرجها فورا بجدول (TAB) مع رقم (MNO) مشكلتي الكبرى وهمي الأكبر سيكون في دالة عبقرية للبحث في النصوص، نصوص الكتب الجديدة من جهة ونصوص (TAB) والربط بينهما في حالة وجود التطابق المطلوب .. وأعتقد أنني هنا لا أتحدث عن مجرد دالة عبقرية، بل ربما ذكاء اصطناعي أو خوارزميات بحث متطورة .. وهذا ليس مجاله هنا .. فلكل مقام مقال Smart_Search_Pages.accdb
Ahmos قام بنشر يونيو 7 قام بنشر يونيو 7 افكر في حل مختلفة هذه المرة باستخدام النمط لان الجزء والصفحة يأتي بعد الكتاب مباشرة فيمكن العمل علي نمط يتتبعه اي اننا لن نواجه نتائج في مواضع متأخرة صحيح ؟
nssj قام بنشر يونيو 7 الكاتب قام بنشر يونيو 7 2 ساعات مضت, Ahmos said: اي اننا لن نواجه نتائج في مواضع متأخرة صحيح للأسف أخي الكريم .. سنواجه هذا الأمر .. وقد يكون في الملف المرفق مثال لهذا .. وأنا الآن خارج البيت .. باختصار: كل ما واجهناه في الأرقام سنواجهه هنا وزيادة 😂
nssj قام بنشر يونيو 7 الكاتب قام بنشر يونيو 7 (معدل) 2 ساعات مضت, nssj said: وقد يكون في الملف المرفق مثال لهذا تم تعديل يونيو 7 بواسطه nssj
Ahmos قام بنشر يونيو 8 قام بنشر يونيو 8 سؤال لو سمحت دلوقتي احنا عندنا 3 أرقام - رقم الجزء مثال 1 وفي حال كانت ص يتم استبدالها بـ 1 - رقم الصفحة وهو يأتي بنبسة 100% بعد رقم الجزء / وقدياتي حديث في صفحتي فالصفجة الاولي تاتي أولاً ومن ثم الثانية بهذه الكيفية 132-133 رقم الحديث وهو الموجود في العمود B_Hno وفق ما فهمت فقد ياتي اسم الحديث بعده اما - رقمه - او الجزء والصفحة - الصفحة - او الصفحة ويرمز لها بـ ص وقد لا يرمز لها هل من الممكن ان تجتمع الاحتمالات الثلاثة ؟ اما أفكر فيه حالياً هو ان نستهدف عن القص أبعد رقم قد يرد وليكون الرقم المستهدف هو رقم الصفحة والحمد لله قد افضنا الي دالة القص خاصية تسمح لنا بزيادة الجزء المقتطع من النص فمثلاً لو كان النص يتمن كتاب (232) - (1 / 132-133) فإذا تم قص النص برقم الصفحة 132 سنفقد باقي الحديث ولكن يمكن ان نخبر الدالة ان تزيد بعد الرقم وليكن 8 خانات أخري حتي نضمن الجزء المتبقي للبحث يتضمن كافة المعلومات التي قد نحتاج اليها ومن ثم تقوم بعمل دالة تقوم بعمل إستبدال لـ ص او (ص او ( ص بـ 1 / وتستبدل أيضاً و( او و ( باسم الحديث ( النتيجة اننا لدينا نص الان تم معالجته ولم يعد هناك أرقام تاتي في مواضع متأخرة ومن ثم يمكن تطبيق نمط لنفحص تطابق النتيجة من عدمها في انتظار مراجعتك وتعليق ودعواتك بالتوفيق 1
nssj قام بنشر يونيو 8 الكاتب قام بنشر يونيو 8 3 ساعات مضت, Ahmos said: او الصفحة ويرمز لها بـ ص وقد لا يرمز لها الصفحة بدون الجزء لا بد أن يرمز لها بحرف ص وقبله قوس بمسافة أو بدون (ص 55) ( ص 55 )، أما حرف ص بدون قوس فغير وارد 3 ساعات مضت, Ahmos said: هل من الممكن ان تجتمع الاحتمالات الثلاثة ؟ لا يمكن، إما رقم الحديث ، أو الجزء والصفحة ، أو الصفحة فقط 3 ساعات مضت, Ahmos said: ومن ثم تقوم بعمل دالة تقوم بعمل إستبدال لـ ص او (ص او ( ص بـ 1 / وتستبدل أيضاً و( او و ( باسم الحديث ( لا مشكلة في استبدال (ص & ( ص بـ 1/ في كل الملف بشرط أن يأتي بعدها بمسافة أو بدون مسافة رقم وإذا كنت تريد أن تجعل الاستبدال إذا جاءت (ص & ( ص بعد اسم الكتاب مباشرة فعندها لا يلزم أن تشترط أن يكون بعدها رقم لكن قد يأتي في النص: الأربعين للبكري (ص 55) حدثنا .. .. .. ..، و(ص 102) وعندها لن يتم استبدال الموضع الثاني لأنه ليس بعد اسم الكتاب مباشرة لذلك فلعله من الأفضل أن يكون الاستبدال بشرط أن يكون بعدها بمسافة أو بدون مسافة رقم، إذا كان هذا ممكنا، وإن لم يكن ممكنا فيمكن الاستبدال بعد اسم الكتاب مباشرة ولا بأس في ذلك لأن المثال الذي ذكرته قليل ولا مشكلة من معالجته يدويا 3 ساعات مضت, Ahmos said: وتستبدل أيضاً و( او و ( باسم الحديث ( لا أرى حاجة لهذا الاستبدال، لأن المثال الذي ذكرته 3 ساعات مضت, Ahmos said: كتاب (232) - (1 / 132-133) غير وارد أن يرد في النص وكما أنت تفكر بصوت عالي فأنا سأفكر بصوت عالي وكأني أتعامل مع ملفات الوورد: مشكلتنا في مثل (1/ 132-133) (ص 33-34) هل يمكن أن نستخلص بعد اسم الكتاب (10) حركات مثلا، ثم نذهب إلى أول (-) ثم أستبدلها برمز غير موجود في الملف، مثلا //، ثم أتأكد من عدم وجود مسافة بعد هذا الرمز الجديد باستبدال (// ) بـ (//) في كل الملف، ثم أعود للدالة في أكسس لتحذف كل ما بعد (//) إلى أول مسافة اشترطت أن تحذف إلى أول مسافة وليس إلى نهاية القوس) لأن القوس قد لا يكون موجودا، وفي حالة وجود كلام أو أرقام مهمة فلن تحذف لأنه قطعا قبلها مسافة، والدالة توقفت عندها خطوات مملة 🙄 .. ولكن هكذا كنت أعمل في وورد 😅 إجمالا .. إذا كان هذا الأمر شديد التعقيد فلا بأس بمعالجته يدويا وبالتوفيق أخي الكريم
Ahmos قام بنشر يونيو 8 قام بنشر يونيو 8 إن شاء الله الأمر ميسر وسيفتح الله لنا ولكن أحاول ان استوضح منك لمعرفة الحالات التي قد نوجهها في المثال الذي ذكرته 5 ساعات مضت, nssj said: مشكلتنا في مثل (1/ 132-133) (ص 33-34) فكيف يحدث هذا و 132 و133 ارقام صفحات و 33 و 34 أيضاً سؤال رقم الصفة الموجود بالملف هو دائماً الرقم الأول صح ؟ مثل 132 و 33 آلية البحث التي أفكر بها بعد اسم الكتاب مسافات او لا ( او لا مسافات او لا ثم رقم الجزء ثم مسافات او لا ثم فاصل / سؤال هل يتغير الفاصل او هو دائمة / ثم مسافات او لا ثم رقم الصفحة فاذا كان رقم الصفحة الذي سنبحث عنها هو دائماً الرقم الأول بعد الجزء والفاصل وسوف نعتمد هذه الطريقة إن شاء الله ولذلك اريد استبدال و( باسم الكتاب حتي نستطيع إتباع نمط محدد
nssj قام بنشر يونيو 8 الكاتب قام بنشر يونيو 8 10 دقائق مضت, Ahmos said: فكيف يحدث هذا و 132 و133 ارقام صفحات و 33 و 34 أيضاً أخي الكريم .. هذا يستخدم أحيانا في الأحاديث الطويلة التي تأخذ أكثر من صفحة، (1/ 132-133) تعني أن الحديث بدأ من صفحة 1/ 132، وانتهى في 1/ 133 والكتب التي تستخدم هذه الطريقة تستخدم في هذه الحالة الشرطة (-) يعني أن الحديث ممتد في هذه الصفحات أما الفاصلة (،) فتعني غالبا موضع آخر، يعني: 1/ 12، 178 تعني أن الحديث في موضعين: الأول 1/ 12، والثاني 1/ 178 14 دقائق مضت, Ahmos said: سؤال هل يتغير الفاصل او هو دائمة / نعم أخي الكريم الفاصل هو دائما (/) بمسافة أو بدون .. لا فاصل بين الجزء والصفحة سواه
Ahmos قام بنشر يونيو 9 قام بنشر يونيو 9 (معدل) السلام عليكم ورحمة الله وبركاته بسم الله الرحمن الرحيم وبه نستعين أخي الكريم فضلاً قم بتجربة الملف المرفق لدي بعض الأسئلة 1- فيما يخص الـ allFoundMNO فقد لا يتم تسجيلهم جميعاً وذلك لسبب كما في هذه الصورة ستجد ان نتائج البحث 5 ولكن الأرقام التي تم تسجيلها تختلف وذلك لان في هذا الجزء من الكود إذا وجد نتيجة مطابقة يتوقف عن البحث وإذا اردنا ان لا يتوقف حتي نسجل كل النتائج علينا ان نأخذ في الاعتبار - الوقت - هل نريد ان يتم تسجيل اول نتيجة مطابقة او أخر نتيجة في foundMNO وهو يحمل القيمة التي سيتم وضعها في MNO 2- عند المراجعة وجدت هذه الحالة وأردت السؤال عنها الأمر هنا ان اسم الكتاب مختلف فاذا كان الاسم الذي تم استخدامه في اول بحث هو الأربعين للبكري فستظهر النتيجة الاولي فقط أقصد انه لن يتم رصد بدائل كما ان آلية البحث تعتمد أن الخلية في العمود MNO تكون فارغه فاذا كان هناك نتيجة مسجلة فلن تبحث باسم الكتاب الموجود في BookName2 1- في انتظار مراجعتك وملاحظاتك وكيف تريد ان يتم تعديل آلية البحث حتي توفر لك أفضل نتيجة ممكنة 2- هل تملك الصفحات كاملة داخل قاعدة البيانات ؟ بالتوفيق Smart_Search_Pages_V1.zip تم تعديل يونيو 9 بواسطه Ahmos حذف صورة مكرره 1
nssj قام بنشر يونيو 9 الكاتب قام بنشر يونيو 9 جزاك الله خيرا أخي الكريم باستعراض النتائج ظهر أن النتائج الخاطئة كلها تقريبا بسبب وجود أكثر من حديث في صفحة واحدة وكما ذكرتُ أخي الكريم، التعقيدات في هذه الطريقة (الصفحات) ترجع إلى أمرين: الأول: وجود أكثر من حديث في صفحة واحدة الثاني: وجود الأرقام بعد (-) وهي أرقام لا حاجة لها عند البحث وتؤثر في عرض النتيجة وحتى نتفرغ للأمر الثاني لا بد من إنهاء الأول، لأنه السبب في معظم النتائج الخاطئة إن لم يكن كلها لذلك لا بد من إكمال البحث في باقي الملف (TAB) حتى لو وجد النتيجة المطابقة، حتى لو كلفنا ذلك وقتا أطول بكثييير وأنا أفضل أن يعرض أول نتيجة كنتيجة رئيسية .. وعلى كل الأحوال سواء عرض أول أو آخر نتيجة لا بد من استعراض هذه النتائج، لذلك أنا أفضل أن يتم فصلها لا حقا في مربعات منفصلة ليكون العرض أسهل وأنا هنا لدي استفسار بخصوص عرض كل النتائج، الذي فهمته أن حقل (allFoundMNO) تعرض فيه جميع النتائج قبل التصفية، لتقوم الدالة بفحص مواضع هذه الأرقام وما قبلها من أسماء الكتب واختيار المطابق منها، واستثناء الأرقام المطابقة لكن لكتب أخرى لذلك يوجد فيه مثل هذا وأنا هنا أسأل، هل يمكن استثناء مثل هذه النتائج، ووضع حقل جديد، مثلا: (CorrectMNONumbers) توضع فيه الأرقام التي تنطبق عليها الشروط فقط، وكأنها الأرقام الصحيحة المعتمدة .. يعني أن تقوم الدالة ببحث جديد كل مرة بعد أن تجد نتيجة مطابقة، لكن تبدأ من المكان الذي وصلت إليه من (TAB) وتبحث من بعده حتى تصل إلى نهايته، وفي كل مرة تجد رقما مطابقا تضعه في (CorrectMNONumbers)، وتكمل البحث من حيث وصلت، وهكذا ينتهي جدول (TAB) * وأما المثال الذي ذكرته أخي الكريم الأربعين للبكري (ص 38-39) // البكري في الأربعين (ص 39) فيغلب على ظني أن الخطأ ليس من تغير اسم الكتاب، لأن كل حديث في موضع مستقل، المشكلة في (-) والرقم الذي بعدها، فحتى لو كان اسم الكتاب في الموضع الثاني الأربعين للبكري (ص 39) فلن تلتفت له لأنها وجدت هذا الرقم (39) في موضع آخر قبله وهنا تأتي المشكلة الثانية: البحث عن طريقة لتجاهل الأرقام بعد (-) ، فما هو الإجراء الذي اتخذته الدالة لهذا الغرض ؟
Ahmos قام بنشر يونيو 9 قام بنشر يونيو 9 أبدأ من حيث انتهيت الدالة الان تطابق وتبحث عن رقم الصفحة قبل او بعد الـ - يمكن ان نجعل الدالة تطابق النتائج القريبة فقط أي بعد الجزء و الفاصل فقد كنت أفكر في هذا الأمر والحمد لله تم التعديل علي الدالة إليك الدالة الجديدة ومثال عليها Public Function isBookInTextPageNum(ByVal fullText As String, _ ByVal BookName As String, _ ByVal partNum As String, _ ByVal pageNum As String, _ Optional exactPartOnly As Boolean = True, _ Optional Nearest As Boolean = True) As Boolean On Error GoTo ErrorHandler Dim regex As Object Dim matches As Object Dim match As Object Dim pattern As String Set regex = CreateObject("VBScript.RegExp") If exactPartOnly Then If Nearest Then pattern = "(?:" & BookName & "\s*[|_/\\ -]*\s*[\s*|'\(\[\{""]*" & partNum & "\s*[;¡`,|_/\\ -]*\s*[;¡`,|'\(\[\{""]*" & pageNum & ")" Else pattern = "(?:" & BookName & "\s*[|_/\\ -]*\s*[\s*|'\(\[\{""]*" & partNum & "\s*[;¡`,\d|_/\\ -]*\s*[;¡`,\d|'\(\[\{""]*" & pageNum & ")" End If Else If Nearest Then pattern = "(?:" & BookName & "\s*[|_/\\ -]*\s*[\s*|'\(\[\{""]*" & partNum & "\s*[;¡`,|_/\\ -]*\s*[;¡`,|'\(\[\{""]*" & pageNum & "\s*[|_/\\ -]*\s*[|'\)\(\[\{""]*" & ")" Else pattern = "(?:" & BookName & "\s*[|_/\\ -]*\s*[\s*|'\(\[\{""]*" & partNum & "\s*[;¡`,\d|_/\\ -]*\s*[;¡`,\d|'\(\[\{""]*" & pageNum & "\s*[\d|_/\\ -]*\s*[|'\)\(\[\{""]*" & ")" End If End If With regex .Global = False .MultiLine = True .IgnoreCase = False .pattern = pattern End With Set matches = regex.Execute(fullText) If Not matches Is Nothing And matches.count > 0 Then ' Debug.Print "Book(s) found in text:" ' For Each match In matches ' Debug.Print "Found : " & match.Value ' Next isBookInTextPageNum = True Else isBookInTextPageNum = False End If CleanAndExit: If Not regex Is Nothing Then Set regex = Nothing If Not matches Is Nothing Then Set matches = Nothing Exit Function ErrorHandler: Debug.Print "Error: " & Err.Description isBookInTextPageNum = False Resume CleanAndExit End Function إذا أردت طباعة النتائج وقت الاختبار فقط قم بتفعيل هذا الجزء داخل الدالة بحذف علامة ' ' Debug.Print "Book(s) found in text:" ' For Each match In matches ' Debug.Print "Found : " & match.Value ' Next الان كود التجربة والنتائج Sub Test_isBookInTextPageNum() Dim fullText As String Dim BookName As String Dim partNum As String Dim pageNum As String Dim result As Collection Dim match As Variant fullText = "The text includes book names and parts such as: bookName (1 \ 100 - 200 , 100-140), bookName (2 \ 150)." BookName = "bookName" partNum = "1" pageNum = "100" Debug.Print "------------------------------------" Debug.Print isBookInTextPageNum(fullText, BookName, partNum, pageNum, True, True) Debug.Print "------------------------------------" Debug.Print isBookInTextPageNum(fullText, BookName, partNum, pageNum, False, True) Debug.Print "------------------------------------" Debug.Print isBookInTextPageNum(fullText, BookName, partNum, pageNum, True, False) Debug.Print "------------------------------------" Debug.Print isBookInTextPageNum(fullText, BookName, partNum, pageNum, False, False) Debug.Print "------------------------------------" End Sub الان النتائج هي: ------------------------------------ Book(s) found in text: Found : bookName (1 \ 100 True ------------------------------------ Book(s) found in text: Found : bookName (1 \ 100 - True ------------------------------------ Book(s) found in text: Found : bookName (1 \ 100 - 200 , 100 True ------------------------------------ Book(s) found in text: Found : bookName (1 \ 100 - 200 , 100-140) True ------------------------------------ فقد قمت بإضافة للدالة تتيح الاختيار بين أربع احتمالات باستخدامهم معاً Optional exactPartOnly As Boolean = True هذا يخبر الدالة ان تقف عن وجود تطابق ام تكمل حتي أخر ( Optional Nearest As Boolean = True وهذا يخبرها ان تقف عند أقرب نتيجة ام تكمل لو أمكنك التجربة بالمثال السابق وتغير الأرقام وتخبرني أي اختيار نستخدم وللعلم إذا قمت بتعديلات التالية ستجد ان الدالة تعود بجميع النتائج المطابقة من داخل النص وهذا لن يفيد في طريقة الاستخدام الحالية ولكن يمكن استخدامها لاحقاً داخل الدالة نعدل التالي With regex .Global = True .MultiLine = True .IgnoreCase = False .pattern = pattern End With تم تغير من .Global = False إلي .Global = True والان نذهب للمثال ونعدل النص إلي fullText = "The text includes book names and parts such as: bookName (1 \ 100 - 200 , 100-140), bookName (1 \ 100)." ونكمل حديثنا بعد تجربة أخرى إن شاء الله 1
nssj قام بنشر يونيو 9 الكاتب قام بنشر يونيو 9 أخي الكريم .. لو تتكرم وترفع الملف بعد التحديث فقد جربت استبدال كود isBookInTextPageNum بالذي هنا ولم يعط النتائج المطلوبة
Ahmos قام بنشر يونيو 9 قام بنشر يونيو 9 اخي الكريم لم يتم تطبيق هذا التحديث علي الكود الاساسي فقط تم التعديل علي الدالة ويوجد كود لاختبارها وهو ( Sub Test_isBookInTextPageNum() وانا في انتظار أن تقوم بالتجربة ومن ثم تخبرني او نتناقش في اي البدائل أفضل ليتم تطبيقه
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.