منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
جلب الكلمة و الكلمة التي قبلها - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة السي شارب C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=175)
+--- قسم : قسم اسئلة C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=176)
+--- الموضوع : جلب الكلمة و الكلمة التي قبلها (/showthread.php?tid=49848)



جلب الكلمة و الكلمة التي قبلها - kebboud - 11-08-24

عندي ملف نصي اسمه CORAN.txt وفيه القرآن الكريم كاملا مكتوبا بالتمحيص و التشكيل 
و عندي 3 تكستبوكس
الأول هو لكتابة الكلمة التي أبحث عنها في هذا الملف النصي (مثلا كلمة الجمعة)
الثاني لعرض هذه الكلمة + الكلمة التي قبلها مباشرة مثلا (سورة الجمعة أو  يَوْمِ الْجُمُعَةِ)
و اريد كل جملة في سطر منفصل 
والثالث هو معرفة عدد الكلمة التي تبحث عنها في الملف النصي ( عدد كلمة الجمعة مثلا)

ارجو من اخوتي الكرماء التكرم علي بهذا الحل


RE: جلب الكلمة و الكلمة التي قبلها - kebboud - 11-08-24

(11-08-24, 01:26 AM)Amir_Alzubidy كتب : حل رقم (1) 
PHP كود :
Imports System.IO

Public Class Form1
    
' افترض أن لديك 3 TextBox: txtSearch, txtResults, txtCount
    ' 
و Button واحد لتنفيذ البحث

    Private Sub btnSearch_Click
(sender As ObjectAs EventArgsHandles btnSearch.Click
        Dim searchTerm 
As String txtSearch.Text.Trim()
 
       Dim filePath As String "C:\path\to\CORAN.txt" ' قم بتحديث المسار إلى المسار الصحيح للملف

        If String.IsNullOrEmpty(searchTerm) Then
            MessageBox.Show("يرجى إدخال كلمة البحث.")
            Return
        End If

        If Not File.Exists(filePath) Then
            MessageBox.Show("الملف النصي غير موجود.")
            Return
        End If

        Dim content As String = File.ReadAllText(filePath)
        Dim lines() As String = content.Split(New String() {Environment.NewLine}, StringSplitOptions.None)
        Dim results As New Text.StringBuilder()
        Dim count As Integer = 0

        For Each line As String In lines
            Dim index As Integer = 0
            While (index = line.IndexOf(searchTerm, index, StringComparison.OrdinalIgnoreCase)) >= 0
                count += 1

                ' 
العثور على الكلمة السابقة
                Dim startIndex 
As Integer Math.Max(0index 50)
 
               Dim previousText As String line.Substring(startIndexindex startIndex).Trim()
 
               Dim previousWord As String previousText.Split(" "c).LastOrDefault()
 
               
                
' إضافة النتيجة إلى نتائج البحث
                results.AppendLine($"{previousWord} {searchTerm}")
                
                ' 
متابعة البحث في نفس السطر
                index 
+= searchTerm.Length
            End 
While
 
       Next

        txtResults
.Text results.ToString()
 
       txtCount.Text count.ToString()
 
   End Sub
End 
Class 


حل اخر باستخدام الريجكس 
PHP كود :
Imports System.IO
Imports System
.Text.RegularExpressions

Public Class Form1
    
' افترض أن لديك 3 TextBox: txtSearch, txtResults, txtCount
    ' 
و Button واحد لتنفيذ البحث

    Private Sub btnSearch_Click
(sender As ObjectAs EventArgsHandles btnSearch.Click
        Dim searchTerm 
As String txtSearch.Text.Trim()
 
       Dim filePath As String "C:\path\to\CORAN.txt" ' قم بتحديث المسار إلى المسار الصحيح للملف

        If String.IsNullOrEmpty(searchTerm) Then
            MessageBox.Show("يرجى إدخال كلمة البحث.")
            Return
        End If

        If Not File.Exists(filePath) Then
            MessageBox.Show("الملف النصي غير موجود.")
            Return
        End If

        Dim content As String = File.ReadAllText(filePath)
        Dim regexPattern As String = String.Format("\b(\w+)?\b\s+{0}\b", Regex.Escape(searchTerm))
        Dim regex As New Regex(regexPattern, RegexOptions.IgnoreCase)
        Dim matches As MatchCollection = regex.Matches(content)
        Dim results As New Text.StringBuilder()
        Dim count As Integer = matches.Count

        For Each match As Match In matches
            If match.Success Then
                Dim previousWord As String = If(String.IsNullOrEmpty(match.Groups(1).Value), "", match.Groups(1).Value)
                results.AppendLine($"{previousWord} {searchTerm}")
            End If
        Next

        txtResults.Text = results.ToString()
        txtCount.Text = count.ToString()
    End Sub
End Class 

شكرا أخي الكريم 
و لكن من دون نتيجة 
مثلا إذا كتبت كلمة المؤمنون في مربع البحث ستأتيك النتيجة هكذا :
سورة المؤمنون 
فقط بدلا من يأتيك بكلمات المؤمنون الأخرى في القرآن الكريم 
ثانيا عدد الكلمات = 1


RE: جلب الكلمة و الكلمة التي قبلها - kebboud - 11-08-24

(11-08-24, 12:38 PM)Amir_Alzubidy كتب : المعذرة اخي الحبيب ربما هناك مشكلة بعدم فهم السؤال ،
اليك التعديل مجدداً و اتمنى ان يكون حلاً موفقاً . 
ان لم يكن كذلك فلا بأس ، يمكنك ارفاق الملف النصي في ردك القادم للتجربة 
تحياتي لك 
PHP كود :
Imports System.IO
Imports System
.Text.RegularExpressions

Public Class Form1
    
' افترض أن لديك 3 TextBox: txtSearch, txtResults, txtCount
    ' 
و Button واحد لتنفيذ البحث

    Private Sub btnSearch_Click
(sender As ObjectAs EventArgsHandles btnSearch.Click
        Dim searchTerm 
As String txtSearch.Text.Trim()
 
       Dim filePath As String "C:\path\to\CORAN.txt" ' قم بتحديث المسار إلى المسار الصحيح للملف

        If String.IsNullOrEmpty(searchTerm) Then
            MessageBox.Show("يرجى إدخال كلمة البحث.")
            Return
        End If

        If Not File.Exists(filePath) Then
            MessageBox.Show("الملف النصي غير موجود.")
            Return
        End If

        Dim content As String = File.ReadAllText(filePath)
        Dim regexPattern As String = String.Format("(\b\w+\b)?\s+\b{0}\b", Regex.Escape(searchTerm))
        Dim regex As New Regex(regexPattern, RegexOptions.IgnoreCase Or RegexOptions.Multiline)
        Dim matches As MatchCollection = regex.Matches(content)
        Dim results As New Text.StringBuilder()
        Dim count As Integer = matches.Count

        For Each match As Match In matches
            If match.Success Then
                Dim previousWord As String = If(String.IsNullOrEmpty(match.Groups(1).Value), "", match.Groups(1).Value)
                results.AppendLine($"{previousWord} {searchTerm}")
            End If
        Next

        txtResults.Text = results.ToString()
        txtCount.Text = count.ToString()
    End Sub
End Class 
المعذرة أخي الكريم 
نفس النتيجة 
الكود بعد تحويله إلى C#
        private void btnSearch_Click(object sender, EventArgs e)
        {
            string searchTerm = txtSearch.Text.Trim();
            string filePath = @"CORAN.txt"; // Update the path to the correct file path

            if (string.IsNullOrEmpty(searchTerm))
            {
                MessageBox.Show("Please enter a search term.");
                return;
            }

            if (!File.Exists(filePath))
            {
                MessageBox.Show("The text file does not exist.");
                return;
            }

            string content = File.ReadAllText(filePath);
            string regexPattern = $@"(\b\w+\b)?\s+\b{Regex.Escape(searchTerm)}\b";
            Regex regex = new Regex(regexPattern, RegexOptions.IgnoreCase | RegexOptions.Multiline);
            MatchCollection matches = regex.Matches(content);
            StringBuilder results = new StringBuilder();
            int count = matches.Count;

            foreach (Match match in matches)
            {
                if (match.Success)
                {
                    string previousWord = string.IsNullOrEmpty(match.Groups[1].Value) ? "" : match.Groups[1].Value;
                    results.AppendLine($"{previousWord} {searchTerm}");
                }
            }

            txtResults.Text = results.ToString();
            txtCount.Text = count.ToString();
        }

فقط يعطيك مثلا سورة المؤمنون... و لا يعطيك بقية الآيات التي توجد فيها كلمة المؤمنون
الطلب مرة أخرى للتوضيح:
لدي ملف نصي يسمى QURAN.txt، والذي يحتوي على القرآن الكريم كاملاً، مكتوباً بعلامات التشكيل. اريد دالة بلغة سي شارب تبحث في هذا الملف النصي ولدي 3 مربعات نصية الأول هو لكتابة الكلمة التي أبحث عنها في هذا الملف النصي (كلمة الجمعة مثلاً). 
والثاني هو لعرض هذه الكلمة + الكلمة التي قبلها مباشرة، مثلاً (سورة الجمعة أو يوم الجمعة). أريد أن تكون كل جملة في سطر منفصل
 والثالث هو لمعرفة عدد الكلمة التي تبحث عنها في الملف النصي (عدد كلمة الجمعة مثلا.


RE: جلب الكلمة و الكلمة التي قبلها - kebboud - 12-08-24

(12-08-24, 01:37 AM)Amir_Alzubidy كتب : اخي الحبيب جزاك الله خير
بارك الله سعيك في خدمة القرآن الكريم 
كما لدي رغبة شديدة بأن اكون جزءً من نجاح هذا العمل لو بالقليل 
هذه محاولة اتمنى ان تؤدي الغرض 
كما اتمنى من الاخوة ممن لديه الخبرة او الطريقة المشاركة لحل هذه المشكلة لنتشارك الاجر 
Heart Heart
PHP كود :
private void btnSearch_Click(object senderEventArgs e)
{
 
   string searchTerm txtSearch.Text.Trim();
 
   string filePath = @"QURAN.txt"// تأكد من تحديث المسار إلى المسار الصحيح للملف

 
   if (string.IsNullOrEmpty(searchTerm))
 
   {
 
       MessageBox.Show("يرجى إدخال كلمة البحث.");
 
       return;
 
   }

 
   if (!File.Exists(filePath))
 
   {
 
       MessageBox.Show("الملف النصي غير موجود.");
 
       return;
 
   }

 
   string content File.ReadAllText(filePath);
 
   string regexPattern = $@"(\b\w+\b)?\s+\b{Regex.Escape(searchTerm)}\b";
 
   Regex regex = new Regex(regexPatternRegexOptions.IgnoreCase RegexOptions.Multiline);
 
   MatchCollection matches regex.Matches(content);
 
   StringBuilder results = new StringBuilder();
 
   int count matches.Count;

 
   foreach (Match match in matches)
 
   {
 
       if (match.Success)
 
       {
 
           string previousWord string.IsNullOrEmpty(match.Groups[1].Value) ? "" match.Groups[1].Value;
 
           results.AppendLine($"{previousWord} {searchTerm}");
 
       }
 
   }

 
   txtResults.Text results.ToString();
 
   txtCount.Text count.ToString();


نصرك الله و اعزك و رزقنا و اياك الصحة و العافية
هذا الكود لا يعمل


RE: جلب الكلمة و الكلمة التي قبلها - Zuhare - 13-08-24

استفيد من الكود في موضوع "البحث مع تجاهل التشكيل في الريتش بوكس" هدا الرابط http://vb4arb.com/vb/showthread.php?tid=16553


RE: جلب الكلمة و الكلمة التي قبلها - Taha Okla - 13-08-24

إن كنت تبحث عن هدف برمجي،
فقد كفوك الشباب بما قدموه من حلول، وعليك تكييفها لتناسب ما تريد.
ولحلول أكثر فعالية أبحث في جوجل وفي يوتيوب عن Regex وتعلم عنها
فيها أكثر مما يطلب المبرمج العادي بكثير.





أما إن كنت تريد صناعة برنامج ليساعدك في بحوث عن القرآن

فهذا رابط لبرنامج ما ترك شيء إلا ووضع فيه من إحصاء وبحث وترقيم وتجميع .. 

برنامج إحصاء القرآن - تحميل من موقع الكحيل


RE: جلب الكلمة و الكلمة التي قبلها - kebboud - 15-08-24

(13-08-24, 09:52 PM)Taha Okla كتب : إن كنت تبحث عن هدف برمجي،
فقد كفوك الشباب بما قدموه من حلول، وعليك تكييفها لتناسب ما تريد.
ولحلول أكثر فعالية أبحث في جوجل وفي يوتيوب عن Regex وتعلم عنها
فيها أكثر مما يطلب المبرمج العادي بكثير.





أما إن كنت تريد صناعة برنامج ليساعدك في بحوث عن القرآن

فهذا رابط لبرنامج ما ترك شيء إلا ووضع فيه من إحصاء وبحث وترقيم وتجميع .. 

برنامج إحصاء القرآن - تحميل من موقع الكحيل

ليست هذه المرة الأولى التي ترد بها على أحد الأخوة بهذا الأسلوب   الجاف المحبط ..
نحن هنا لنتعلم ..
نحن نبحث عن شيء نتعلمه 
لسنا هنا للبحث عن ما ينتجه الآخرون لنستهلكه بغباء ..
عندما طرحت سؤالي هذا لم أكن أتوقع منك أن تغلق باب التعلم بهذه العنجهية و الإنفعالية !!!
الحقيقة أن بعضنا مازال بحاجة أن يتعلم كيف يخاطب الآخرين دون أن يقتل فيهم أمل البحث و العلم


RE: جلب الكلمة و الكلمة التي قبلها - Taha Okla - 15-08-24

(15-08-24, 01:33 AM)kebboud كتب : ليست هذه المرة الأولى التي ترد بها على أحد الأخوة بهذا الأسلوب   الجاف المحبط ..
نحن هنا لنتعلم ..
نحن نبحث عن شيء نتعلمه 
لسنا هنا للبحث عن ما ينتجه الآخرون لنستهلكه بغباء ..
عندما طرحت سؤالي هذا لم أكن أتوقع منك أن تغلق باب التعلم بهذه العنجهية و الإنفعالية !!!
الحقيقة أن بعضنا مازال بحاجة أن يتعلم كيف يخاطب الآخرين دون أن يقتل فيهم أمل البحث و العلم

الموضوع الذي وضعه لك الأخ المبدع (Zuhare)  موضوع الأخ السندبااد فيها أكثر مما طلبت بكثير
مواضيع السندباد في برامج عرض النصوص كالقرآن الكريم وغيره سبقت غيرها من البرامج العربية 
كبرامج مفتوحة المصدر ..

أما عن موضوع البحث العلمي في القرآن(هذا البرنامج لعشاق القرآن  -- وليس للأغبياء) ..
كما ذكرت لك عن برنامج احصاء القرآن الكريم .. من موقع الكحيل..

فهو أضخم برنامج حتى الآن في هذا المجال ..

وبالنسبة عن الطرق التي ذكرها هنا الأخ (Amir_Alzubidy ) والتي تعد موضوع كبير جداً ..
ولا يمكن فهمه من خلال نسخ الكود ولصقه ولا حتى مبرمج محترف يمكنه أن يفهمها دون الرجوع للمصادر ..
وتحتاج أن تفهم الموضوع من أساسه  من خلال مشاهدة فيديوهات أو تقرأ عن الـ (Regex)   وتفهم على أي أساس تعمل الـ (Regex).

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

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

ولكن سوء نيتك التي تظهر في ردودك .. تجعلك تتسرع بالرد والتفوه بالكثير من الحماقات ..
كما ظهرت هنا جلياً في هذا الموضوع ..
وإن كنت صادقاً وأنك من هواة التعلم : أنتج برنامج فيه ربع ميزات برنامج إحصاء القرآن الكريم الذي ذكرته لك .. 

وأعلم أنك لن تفعل  لأنك من هواة الكلام وتضييع الوقت ..ولست من أهل العمل الجاد..