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

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

مغلق
بدأه أبو هاشم المصري في 26 يوليو 2006 · 13 رد · 2,293 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

في برمجة الإنترنت بلغة php وقواعد بيانات mysql يوجد في إستعلامات mysql جملة replace وللأسف هي غير موجودة في اللغة sql القياسية :s

فعند البحث عن كلمة في حقل يحتوي كل سجل منه علي أية من أيات القرآن الكريم غالبا المستخدمين يصعب عليهم كتابة كلمة البحث بالتشكيل والآيات مكتوبة بالتشكيل وفي الغالب هذا الكود هو الشائع في لغة php

$repstrng1 = "replace(ayaa,'ِ','')";
$repstrng2 = "replace(". $repstrng1 . ",'َ','')";
$repstrng4 = "replace(". $repstrng2 . ",'ً','')";
$repstrng5 = "replace(". $repstrng4 . ",'ُ','')";
$repstrng6 = "replace(". $repstrng5 . ",'ٌ','')";
$repstrng7 = "replace(". $repstrng6 . ",'ّ','')";
$repstrng8 = "replace(". $repstrng7 . ",'ٍ','')";
$repstrng9 = "replace(". $repstrng8 . ",'ْ','')";
$sql = "select chapter,soraano,pageno,soraaname,ayaa,ayaano from Quran where " . $repstrng9 . " like '%$searchterm%'";

حيث أن ayaa هو إسم ذلك الحقل الذي يحتوي علي الآيات

للأسف حتي الآن لا أعرف لهذا حلا مع قواعد بيانات sql أو access من جهة الإستعلام

ولكن جائتني فكرة بعمل جدولين أحدهما يحتوي علي الآيات الغير مشكولة ويتم البحث فيه

والآخر يحتوي علي الآيات المشكولة ويتم العرض من خلالة بالإعتماد علي حقل أساسي له نفس القيم في الجدولين

_____________________________

هل من حل عند الأخوة سواء بإسعلامات sql أو بإستخدام دوال النصوص الموجودة في??!! :wacko: vb.net

Electrical communications and electronics engineer

C++ Developer

 


stackoverflow profile : http://stackoverflow.com/users/249120/ahmed-safan


 


Just Keep Moving On , never stop until you are dead


#2

السلام عليكم

استخدم التعابير النظامية Regular Expressions هو عبارة عن قالب Class مدرج مع بيئة الـ .NET

شاهد المثال التالي

#Region " Constants Variables "

	' متغيرات لتحويل همزة الألف إلى ألف مجردة
	' وتحويل الياء إلى ألف مقصورة
	' وتحويل التاء المربوطة إلى هاء مربوطة
	Const YaaRX As String = "[ي]\b" 'البحث عن حرف الياء
	Const YaaReplace As String = "ى" ' حذف الياء

	Const AleefMAKRX As String = "[ة]" 'البحث عن التاء المربوطة
	Const AleefMAKReplace As String = "ه" 'حذف التاء المربوطة

	Const AleefStandRX As String = "[(إ|أ|آ)]" ' البحث عن الهمزة
	Const AleefStandReplace As String = "ا" ' حذف همزة الألف

	Const AlWaawRX As String = "[ؤ]" ' حذف همزة الواو
	Const AlWaawReplace As String = "و"

	Const AlefAlKorseRX As String = "[ئ]\b" ' حذف همزة الكرسي
	Const AlefAlKorseReplace As String = "ى"




#End Region


#Region " Arabic Letters Correction & Contents"

	'وظيفة مشتركة للبحث عن الياء لإستبدالها بالألف المقصورة
	'وكذلك البحث عن التاء المربوطة و إستبدالها بالهاء المربوطة
	'و إن كانت التاء المربوطة لا تأتي إلا في أخر الكلمة لكن من باب التحرصِ فقط
	'تم البحث عنها بشرط أن تكون أخر الكلمة  ,,, قد تكون تحصيل حاصل
	'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	Public Shared Function ValidateAleefAndYaa(ByVal FullName As String) As String
		Try
			Dim rxYLetter As New Regex(YaaRX)
			Dim rxALetter As New Regex(AleefMAKRX)
			Dim rxAlSLetter As New Regex(AleefStandRX)
			Dim rxWaawLetter As New Regex(AlWaawRX)
			Dim rxAlKLetter As New Regex(AlefAlKorseRX)

			' Dim rxArabicMarkes As New Regex(ArabicMarksRX)
			FullName = rxYLetter.Replace(FullName, YaaReplace)
			FullName = rxALetter.Replace(FullName, AleefMAKReplace)
			FullName = rxAlSLetter.Replace(FullName, AleefStandReplace)
			FullName = rxWaawLetter.Replace(FullName, AlWaawReplace)
			FullName = rxAlKLetter.Replace(FullName, AlefAlKorseReplace)
			Return FullName
		Catch ex As Exception
			Throw ex
		End Try
	End Function

#End Region

هذا المثال يقوم بإستبدال الالف الهمزة بالالف المجردة و كذلك الالف المقصورة بدل الياء في نهاية الكلمة

ويمكنك ان توظفه حسب احتياجاتك

لمشاهدة المثال عن Using MetaCharacters راجع الدرس التالي

وللمزيد عن التعابير النظامية راجع سلسلة تعلم Regular Expressions

في المثال يتضح المقال

#3

لا أظن أن هذا سينفع في البحث حيث أن الكلمات الموجودة في قاعدة البيانات بها تشكيل

أما الكلمة التي نبحث عنها بدون تشكيل

وإن كان ممكنا أرجو مثال علي هذا وجزاك الله خيرأ

Electrical communications and electronics engineer

C++ Developer

 


stackoverflow profile : http://stackoverflow.com/users/249120/ahmed-safan


 


Just Keep Moving On , never stop until you are dead


#4

يا أخي والله لقد قرأت الدروس كلها ومواضيعك هي لمعالجة النصوص في البرنامج أما أنا أريد ذلك بلغة sql

أرجو الرد

Electrical communications and electronics engineer

C++ Developer

 


stackoverflow profile : http://stackoverflow.com/users/249120/ahmed-safan


 


Just Keep Moving On , never stop until you are dead


#5

السلام عليكم

هل هذا الكود المطلوب

طبعا غير الحركات العربيه

عشان انا مش عارف اكتب الحركات كلها

select chapter,soraano,pageno,soraaname,ayaa,ayaano 
from quran
where (
  replace(
   replace(
	replace(
	 replace(
	  replace(
	   replace(
		replace(
		 replace(
		  replace(
		   replace(
			replace([ayaa],'ّ','')
			,'َ',''),
		   'ً',''),
		  'ُ',''),
		 'ٌ',''),
		'ِ',''),
	   'ٍ',''),
	  'ْ',''),
	 'ّ',''),
	'‘',''),
   'أ','ا')
) like'%$searchterm%'

تم تعديل هذه المشاركة بواسطة Mo7eb_Alrasool في 6 أغسطس 2006 في 23:51

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

#6

السلام عليكم نعم هو كذلك أخي

ولكن للأسف التعليمة replace غير موجودة إلا في mysql فهل هناك حل في sql

أنا جائني حل ولكني أظنه مرهق لجهاز الكمبيوتر

نقوم بتقسيم النص المراد البحث عنه إلي كلمات عن طريق ونضع كل كلمة في مصفوفة

نكونة textbuilder ونقوم بإضافة الأتي

كل عنصر من عناصر المصفوفة نقسمه إلي حروف ونضع كل الإحتمالات مع هذه الكلمة من الضم والرفع والكسر والسكون وغيره وهكذا مع كل اللكلمات

ويكون باني النص في النهاية

select * from table1 where text1 like "إحتمال" or text1 like "إحتمال 2"

وهكذا ولكن أن الأمر سيرهق الجهاز وخصوصاً لو أدخل المستخدم عبارة طويلة للبحث

أرجو إيجاد حل

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

Electrical communications and electronics engineer

C++ Developer

 


stackoverflow profile : http://stackoverflow.com/users/249120/ahmed-safan


 


Just Keep Moving On , never stop until you are dead


#7

السلام عليكم

اقتباس
ولكن للأسف التعليمة replace غير موجودة إلا في mysql

اخي الكريم replace موجودة في accsess ans MSSQL

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

#8

هذا ماعلمته من كتاب unleashed mysql من موقع www.cb4a.com

هذا ماعلمته من كتاب unleashed mysql من موقع www.cb4a.com

وعموماً سأتأكد بإذن الله

Electrical communications and electronics engineer

C++ Developer

 


stackoverflow profile : http://stackoverflow.com/users/249120/ahmed-safan


 


Just Keep Moving On , never stop until you are dead


#9

السلام عليكم

اخي لكريم جرب هذا الكود اذا replace مش زابطه

طبعا غير الارقام بالتشكيل

alter function ReplaceArabic(@lpText varchar(255))
returns varchar(255)
as
 begin

 Declare @pos int , @count int
 declare @retValue varchar(255)
 set @count=len(@lpText)
 set @pos =0
 declare @curChr varchar(1)
 set @retValue=''
	--declare @index int
	declare @rightSide varchar(255)

 While (@pos < @count)
	begin
	set @pos=@pos+1  
	  set @rightSide=substring(@lpText,@pos,len(@lpText)-@pos+1)
	  /*if patindex('%1%', @rightSide)=0 and*/
	  if charindex('1',@rightSide)=0 and	   
		 charindex('2',@rightSide)=0 and 
		 charindex('3',@rightSide)=0 and 
		 charindex('4',@rightSide)=0 and
		 charindex('5',@rightSide)=0 and 
		 charindex('6',@rightSide)=0 and 
		 charindex('7',@rightSide)=0 and 
		 charindex('8',@rightSide)=0
		 return @retValue + @rightSide

		 set @curChr=substring(@lpText,@pos,1)
		 if @curChr='1'
			set @retValue=@retValue +''
		 else
			begin
			   if @curChr='2'
				  set @retValue=@retValue + ''
			   else
				  if @curChr='3'
					 set @retValue=@retValue + ''
				  else
					 if @curChr='4'
						set @retValue=@retValue + ''
					 else   
						if @curChr='5'
						   set @retValue=@retValue + ''
						else   
						   if @curChr='6'
							  set @retValue=@retValue + ''
						   else
							  if @curChr='7'
								 set @retValue=@retValue + ''
							  else
								 if @curChr='8'
									set @retValue=@retValue + '' 
								 else		
									set @retValue=@retValue + @curChr

			end
	   end 
 return @retValue
 end

ولكن اذا عملت جدولجديد فسيكون افضل واسرع

وهذا كوذ لنقل البيانات من الجدول quran ال quran_plane بعد ازاله الحركات

Function replaceArbChr(ByVal Txt)
'chrs = Array(240, 241, 243, 246, 250)
For i = 240 To 250
	 Txt = Replace(Txt, Chr(i), "")
Next
replaceArbChr = Txt
End Function
Sub InserAyah()
sql = " select Chapter , soraano, pageno, soraaname, replaceArbChr(quran.ayaa) as ayaa, ayaano  into quran_plane from quran"
 CurrentDb.Execute (sql)
end sub






' or this one 
Sub InserAyah()
Dim rec
Set rec = CurrentDb.OpenRecordset("Select * from Quran")
Chapter , soraano, pageno, soraaname, ayaa, ayaano

While Not rec.EOF
	 newAyah = rec("AyahText")
	 newAyah = replaceArbChr(t)
	 newAyah = "'" & Replace(t, "'", "''") & "'"
	 sql = "Insert into Quran_Plane (chapter,soraano,pageno,soraaname,ayaa,ayaano) values(" & _
			rec("chapter") & "," & rec("soraano") & "," & _
			rec("pageno") & ",'" & rec("soraaname") & "'," & _
			newAyah & "," & rec("ayaano") & ")"
	 CurrentDb.Execute (sql)
rec.MoveNext
Wend
End Sub

تم تعديل هذه المشاركة بواسطة Mo7eb_Alrasool في 7 أغسطس 2006 في 08:35

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

#10

بارك الله فيك وشكراً لك وسأجرب ذلك بإذن الله علما أن التعليمة replace لا تعمل من خلال server explorer

وكانت هذه الرسالة تظهر عند استخامها

post-63357-1154997827_thumb.jpg

تم تعديل هذه المشاركة بواسطة أبو هاشم المصري في 8 أغسطس 2006 في 03:46

Electrical communications and electronics engineer

C++ Developer

 


stackoverflow profile : http://stackoverflow.com/users/249120/ahmed-safan


 


Just Keep Moving On , never stop until you are dead


#11

السلام عليكم

اخي الكريم انت تستخدم Access DataBase

فلذالك ال function Replace تستطيع استخدامه من خلال الاكس فقط

حيث انه موجود في المكتبه VBA والله اعلم

اما الكود alter function فهو لل mssql

بالنسبة للاكسس فالافضل عمل جدولدون التشكيل والحركات ثم عند اختيار البحث بتجاهل التشكيل يتم البحث في الجدول الاخر

اواضافة حقل جديد في الجدول يكون بدون تشكيل

وللعمل الجدول الثاني

افتح الاكسس وابشئ Module وضع فيه الكود التالي

Function replaceArbChr(ByVal Txt)
 'chrs = Array(240, 241, 243, 246, 250)
 For i = 240 To 250
	  Txt = Replace(Txt, Chr(i), "")
 Next
 replaceArbChr = Txt
End Function

Sub InserAyah()
 sql = " select Chapter , soraano, pageno, soraaname, replaceArbChr(quran.ayaa) as ayaa, ayaano  into quran_plane from quran"
 CurrentDb.Execute (sql)
end sub

ثم ضع المؤشر داخل InserAyah

ثم اضغط Run F5

فسينشئ جدول جديد اسمه quran_plane يحتوي علي القراّن الكريم بدون تشكيل

وعند البحث تكون الجملة كالتالي

select  quran.*
from quran inner join quran_plane on 
	(quran.chapter = quran_plane.chapter) and
	(quran.soraano = quran_plane.soraano)
where quran_plane.ayaa like "%searchterm%";

او تضيف حقل جديد وتسمهه مثلا ayaa_plane ثم تنفذ الجملة التالية

currentdb.execute "update quran set ayaa_plane=replaceArbChr(ayaa)"

وعند البحث تكون الجملة كالتالي

select  quran.* from quran 
  where ayaa_plane like "%searchterm%";

تم تعديل هذه المشاركة بواسطة Mo7eb_Alrasool في 9 أغسطس 2006 في 03:20

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

#12

the code to make no tashkel in the text from sw hole qran

 Private Function fsSoryNoTshkel(ByVal sSory As String) As String

		sSory = sSory.Replace("ْ", "") '   ْ
		sSory = sSory.Replace("َ", "") '   َ
		sSory = sSory.Replace("ِ", "") '   ِ
		sSory = sSory.Replace("ّ", "") '   ّ
		sSory = sSory.Replace("ُ", "") '   ُ
		sSory = sSory.Replace("ً", "") '   ً
		sSory = sSory.Replace("ٍ", "") '  ٍ
		sSory = sSory.Replace("ّ", "") ' ~
		sSory = sSory.Replace("ٌ", "") '  ٌ

		Return sSory
	End Function
#13

أخي KARIMSOFT الموضوع ليس في لغة البيسك ولكن في sql

وشكرا

Electrical communications and electronics engineer

C++ Developer

 


stackoverflow profile : http://stackoverflow.com/users/249120/ahmed-safan


 


Just Keep Moving On , never stop until you are dead


#14

السلام عليكم ورحمه الله وبركاته ،

ليست خبرتي بذلك الحد ولكنني اعتقد ان system.cutureinfo تحل المشكلة وستجعلك تتجاوز التشكيل ! كيف لا أعلم، ولكنني بالمصادفة كنت اليوم اقرأ في كتابتركي العسيري عن الطريقة compare للمتغيرات من الفئة string ، فوجدت انه يمكنك ان تقارن بين نص مشكل ونص غير مشكل ،

تحياتي

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…