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

How I can filter Statment?

مغلق
بدأه eng_seham في 21 مايو 2007 · 10 رد · 824 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

string s = 10% 25 %50 100

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

بمعنى (10% %50)

ولا اريد اي رقم آخر لا يحتوي على النسبة المئوية

#2

السلام عليكم

هذا تحوير بسيط لكودك جربه وأخبرني

string Dis = string.Empty;
   /*LDiscount3.Text*/
   string str = " خصم 20%إذا وصلت مشترياتك 100 علبة و 10% إذا وصلت مشترياتك 50 علبة";
			//string str = this.DS.Tables[0].Rows["Discount"].ToString();
   char[] Leng = str.ToCharArray();
   for (int s = 0; s < str.Length; s++)
   {
	   if (Char.IsDigit(Leng)|| Leng == '%')
	   {
		   int d = s+4;
		   for (int j = s; j < d; j++)
		   {
			   if (Char.IsDigit(Leng))
				if (Leng[s+2] == '%')
			   {

				   Dis += Leng[j].ToString().Trim() + Leng[j + 1].ToString().Trim() + Leng[j+2].ToString().Trim();;

			   }
			   s++;
		   }

		  // Dis += "<br>";

	   }
   }
   MessageBox.Show(Dis);
#3

اشكرك أخ Ben_Laiid على الإهتمام جربت الكود ولكن ظهرت به بعض المشاكل

1- إذا احتوت الجملة على رقم في آخرها يجب يعطي خطأ

Outsize Boundary of Array

يجب ان تنتهي بحرف على الاقل حتى تعمل .

2- لا يحضر كل الاحتمالات بمعنى اذا كان الرقم بهذه الصيغة لا يظهره %50

3- لا يحضر أكثر من رقمين فقط

#4
// using System.Text.RegularExpressions;
Regex regex = new Regex(@"(\d+%)|(%\d+)");
Match match = regex.Match("خصم 20%إذا وصلت مشترياتك 100 علبة و 10% إذا وصلت مشترياتك 50 علبة");
while(match.Success) {
	MessageBox.Show(match.Value);
	match = match.NextMatch();
}

تم تعديل هذه المشاركة بواسطة Moudey في 23 مايو 2007 في 02:17

مواضيع متنوعة

#5

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

الأخ : Moudey

جربت الكود ولكن لم يعطي اي شيء لإنه دخل في Infinit Loop

الـ match بقيت تحمل الـ 20%

فأصبح في لوب مستمرة

#6

الاخ الكريم الكود يعمل بشكل جيد معي.

ولا يوجد Infinit Loop

علي العموم جرب استخدام هذه الدالة.

public string Filter(string pattren, string intput)
{
	return Filter(pattren, intput, RegexOptions.None);
}

public string Filter(string pattren, string intput, RegexOptions regexOptions)
{
	string result = string.Empty;
	if(string.IsNullOrEmpty(pattren) || string.IsNullOrEmpty(intput)) return result;
	// using System.Text.RegularExpressions;
	Match match = new Regex(pattren, regexOptions).Match(intput);
	{ while(match.Success) {
			result += match.Value + "\r\n";
			match = match.NextMatch();
		}
	} return result;
}

MessageBox.Show(Filter("\\d+%", "خصم 20% إذا وصلت مشترياتك 100 علبة و 10% إذا وصلت مشترياتك 50 علبة"));

مواضيع متنوعة

#7

الكود الذي وضعة الاخ Ben_Laiid يعمل بشكل جيد جداً ;)

مواضيع متنوعة

#8

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

أخي Moudey

أشكر اهتمامك وجهدك كثيير

الكود يعمل والله ينور بس مشكلتي الأساسية اريد اشتمال جميع الحالات بمعنى

قد تحتوي الجملة على 20% وقد تحتوي على %20 أختلاف وضعية النسبة المئوية هذه هي المشكلة الاساسية والكود هذا لا يشمل الحالتين بل فقط

"\\d+%"

حاولت تجربتة الحالتين

("\\d+%", "\\%+d")

ولكنني لم استطع ارجو الأفادة لو امكن وجزاكم الله خيرا

#9

السلام عليكم

اقتباس
- إذا احتوت الجملة على رقم في آخرها يجب يعطي خطأ

Outsize Boundary of Array

قمت فقط بتحوير صغير لكودك

اقتباس
- لا يحضر كل الاحتمالات بمعنى اذا كان الرقم بهذه الصيغة لا يظهره %50

هناكstandard في كتابة النسب المؤية

اقتباس
- لا يحضر أكثر من رقمين فقط

لا أضن أن صاحب المؤسسة كريم الى حد توفير نسبة تخفيض 100% :D

هكذا توفر ذلك برمجيا :

Dis.Append(new char[]{Leng,Leng[s - 3], Leng[s - 2], Leng[s - 1], ' '});

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

private void Form1_Load(object sender, EventArgs e)
 {
  StringBuilder Dis = new StringBuilder();
  string str = "إذا خصم 20%إذا وصلت مشترياتك 100 علبة 01% و 10% إذا وصلت مشترياتك 50 علبإذا خصم 20% ة";

  char[] Leng = str.ToCharArray();
  for (int s = 0; s < str.Length; s++)
  {if(Equals(Leng,'%'))
   Dis.Append(new char[]{Leng, Leng[s - 2], Leng[s - 1], ' '});			   
  }
   MessageBox.Show(Dis.ToString());
 }
#10

يعمل بنجاح معي هذا الـ pattern كما ذكرت في الحالتين.

10% و %10 و 100000% و %10000 و 1000000000000000000% :)

MessageBox.Show(Filter(@"\d+%|%\d+", "%20 30% 50% %100 %1000 %100000000 10000%"));

مواضيع متنوعة

#11

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

الأخ : Ben_Laiid اشكر أهتمامك وجهدك أنا جربت الكود ولكن أعطاني مشكلة وهي لا يجوز أن تحتوي جملة الخصم في بدايتها على نسبة مئوية يجب ان تبتدأ باي شيء وليكن حرف وإذا احتوت على نسبة مئوية يعطي هذا الخطأ :

index was outside the bounds of the array

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

بمعنى : 20% %10 20% 15%

سوف يحضر 20% %10

الأخ : Moudey جربت الكود وهو يعمل بشكل ممتاز جدا ولجميع الحالات أشكر لك أهتمامك بالموضوع وجهدك.

وجزاكم الله كل خير وجعله في ميزان حسناتكم ..

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

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