السلام عليكم ورحمة الله وبركاته
string s = 10% 25 %50 100
أريد استخراج من هذه الجملة أي رقم يحتوي على نسبة مئوية فقط
بمعنى (10% %50)
ولا اريد اي رقم آخر لا يحتوي على النسبة المئوية
السلام عليكم ورحمة الله وبركاته
string s = 10% 25 %50 100
أريد استخراج من هذه الجملة أي رقم يحتوي على نسبة مئوية فقط
بمعنى (10% %50)
ولا اريد اي رقم آخر لا يحتوي على النسبة المئوية
السلام عليكم
هذا تحوير بسيط لكودك جربه وأخبرني
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);اشكرك أخ Ben_Laiid على الإهتمام جربت الكود ولكن ظهرت به بعض المشاكل
1- إذا احتوت الجملة على رقم في آخرها يجب يعطي خطأ
Outsize Boundary of Array
يجب ان تنتهي بحرف على الاقل حتى تعمل .
2- لا يحضر كل الاحتمالات بمعنى اذا كان الرقم بهذه الصيغة لا يظهره %50
3- لا يحضر أكثر من رقمين فقط
// 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
السلام عليكم ورحمة الله وبركاته
الأخ : Moudey
جربت الكود ولكن لم يعطي اي شيء لإنه دخل في Infinit Loop
الـ match بقيت تحمل الـ 20%
فأصبح في لوب مستمرة
الاخ الكريم الكود يعمل بشكل جيد معي.
ولا يوجد 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 علبة"));السلام عليكم ورحمة الله وبركاته
أخي Moudey
أشكر اهتمامك وجهدك كثيير
الكود يعمل والله ينور بس مشكلتي الأساسية اريد اشتمال جميع الحالات بمعنى
قد تحتوي الجملة على 20% وقد تحتوي على %20 أختلاف وضعية النسبة المئوية هذه هي المشكلة الاساسية والكود هذا لا يشمل الحالتين بل فقط
"\\d+%"
حاولت تجربتة الحالتين
("\\d+%", "\\%+d")
ولكنني لم استطع ارجو الأفادة لو امكن وجزاكم الله خيرا
السلام عليكم
اقتباس- إذا احتوت الجملة على رقم في آخرها يجب يعطي خطأ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());
}يعمل بنجاح معي هذا الـ pattern كما ذكرت في الحالتين.
10% و %10 و 100000% و %10000 و 1000000000000000000% :)
MessageBox.Show(Filter(@"\d+%|%\d+", "%20 30% 50% %100 %1000 %100000000 10000%"));
السلام عليكم ورحمة الله وبركاته
الأخ : Ben_Laiid اشكر أهتمامك وجهدك أنا جربت الكود ولكن أعطاني مشكلة وهي لا يجوز أن تحتوي جملة الخصم في بدايتها على نسبة مئوية يجب ان تبتدأ باي شيء وليكن حرف وإذا احتوت على نسبة مئوية يعطي هذا الخطأ :
index was outside the bounds of the array
وأنا قصدت من كلامي رقمين اقصد ان الجمله لو احتوت على اكثر من نسبة مئوية يحضر اثنين فقط ولم اقصد خانتين في النسبة المئوية
بمعنى : 20% %10 20% 15%
سوف يحضر 20% %10
الأخ : Moudey جربت الكود وهو يعمل بشكل ممتاز جدا ولجميع الحالات أشكر لك أهتمامك بالموضوع وجهدك.
وجزاكم الله كل خير وجعله في ميزان حسناتكم ..
هذا الموضوع مغلق.