PDA

View Full Version : همکاری در نوشتن کد انجام عملیات منطقی توسط Regular Expression



reza9025
پنج شنبه 13 آذر 1393, 17:12 عصر
سلام دوستان

من بنا به دلایلی درصدد ساخت یک برنامه ی کوچک برای انجام عملبات منطقی به وسیله ی Regular Expression بر آمده ام. حالا من چهار عملیات رو بر روی آن پیاده سازی نموده ام. عملیات:




(=>)
(>)
(=<)
(<)


مشکلات:
*. بنا به کمبود وقت و نداشتن دانش کافی هنوز نتوانسته ام عمل مخالف را در این فایل جا بدم.
*. این برنامه ی کوچک فقط توانایی انجام عملیات بر روی اعداد صحیح (مثبت و منفی) را دارد. اگه کسی بتواند این را هم اضافه کند بنظرم فایل کامل خواهد شد.



از اساتید محترم خواهشمندم که کمک کنند این برنامه را تکمیل کنیم تا هم من و دوستان بتوانند استفاده کنند. در ضمن بنا به تحقیق زیاد در این رابطه دریافتم که مشابه این فایل در سطح اینترنت نیست. اگر هم کسی سراغ دارد معرفی کنه ممنون می شم.


سورس فایل را ضمیمه می کنم.

hamid_hr
پنج شنبه 13 آذر 1393, 17:34 عصر
ببخشید من تو این مبحث (و صد البته خیلی از مباحث دیگر) مبتدی هستم
میشه بفرمایید این الان چکار میخواد بکنه؟
یه عدد میگیره با یک اپراتور بعد خروجیش چی هست؟

reza9025
پنج شنبه 13 آذر 1393, 21:46 عصر
خروجي اين يک کد regex هستش. براي مثال در يک فايل متني مثلا رکورد هايي ذخيره شده اند. با ستون هاي نام و سن.
براي اينکه شما تمام رکورد هايي را که سن انها کمتر از 22 سال هست يا بيشتر را بدست اوريد از اين کد ها استفاده بايد بکنيد. البته روش هايي ديگه اي هست ولي اين کد ها دست برنامه نویس رو بازتر مي کنند و سرعت بيشتري دارند مثلا براي فايل هايي که در ان رکورد با ساختار نامشخص ذخيره شده است.

reza9025
جمعه 14 آذر 1393, 00:33 صبح
اولا نمی دونم چرا عنوان تاپیکم رو عوض کردید.:متفکر:




دوما یعنی هشکی حاضر به همکاری نیست؟:افسرده:

reza9025
جمعه 14 آذر 1393, 10:24 صبح
اگه توضیحاتم مبهمه بیشتر توضیح بدم. خدایش تعجب می کنم برای یه همچین بحث مهمی کسی حاظر به همکاری نیست

rahnema1
جمعه 14 آذر 1393, 10:59 صبح
اولا نمی دونم چرا عنوان تاپیکم رو عوض کردید.:متفکر:
دوما یعنی هشکی حاضر به همکاری نیست؟:افسرده:
سلام
اولا اتفاقا من هم با این مساله که عنوان تاپیک باید یه چیز دیگه باشه با شما موافقم مثلا به جای «همکاری» یه چیز دیگه باشه :چشمک:
دوما حالا بگذریم، عملگر مخالف میشه ترکیب عملگر بزرگتر و کوچکتر
و در مورد اعشاری هم در پستهای قبلی روشش را گفتم :متفکر:

reza9025
جمعه 14 آذر 1393, 11:19 صبح
با تشکر فراوان از توجه شما
درسته منم خودم به این نتیجه رسیده بودم که عملگر مخالف اون میشه. ولی مجبورم که دوتا کد regular بنویسم.
حالا عملگر مخالف به جای خودش. شما می تونید به این برنامه قدرت انجام عملیات بر روی اعداد اعشاری را نیز اضافه کنید. مطمعنم که حجم کد ها به نسبت دو تا سه برابر میره بالا. ولی اگه لطفا کنید این امکان را به برنامه بدهید ممنون می شم.

reza9025
جمعه 14 آذر 1393, 15:52 عصر
ایا کسی حاظر به همکاری هست. اگه کسی نیست ما بریم پی کارمون :متفکر::متفکر::متفکر::متفکر:: تفکر::متفکر:

Hossis
یک شنبه 05 بهمن 1393, 00:08 صبح
ایا کسی حاظر به همکاری هست. اگه کسی نیست ما بریم پی کارمون :متفکر::متفکر::متفکر::متفکر:: تفکر::متفکر:
خیلی ها مثل من پیگیر هستند منتها چون مبحث سختیه، کمتر کسی حاضر میشه همکاری کنه
دوست دارم نتیجه کار رو ببینم

Saman_12
یک شنبه 05 بهمن 1393, 01:15 صبح
این کار شما واقعا جای تشویق داره.
اینقدر این خلاقیت شما برای من جالب هست که وقتی متوجه کارکردش شدم هوس کردم برای چند روز فقط روی همین کلاس کار کنم(که متاسفانه نمیشه).
ولی در طول چند هفته آینده سعی میکنم روی این موضوع کار کنم (از ابتدا) و نتیجه رو هم تو همین تایپیک آپ خواهم کرد(قول نمی دم)

partovinia
یک شنبه 05 بهمن 1393, 12:01 عصر
سلام.ممنون از اینهمه خلاقیت وشجاعت برای کار کردن روی مسئله به این سختی !
راستش من خیلی مبتدی هستم و چند روز پیش شروع به خواندن مطالب راجع به regular expression ها کردم .خیلی مبحث پیچیده ای هست.
از شما و از همه اساتید خواهش می کنم که این کار رو ادامه بدین .
متشکرم

Saman_12
یک شنبه 05 بهمن 1393, 15:23 عصر
این نمونه اولیه <= (بزرگتر مساوی) که فقط برای اعداد مثبت هست و اعشار رو هم ساپورت میکنه-مثل 15 که صحیح هست یا 15.568 که اعشار ه- :

private string GEQ(string num)
{


Int32 dotindex = num.IndexOf(".");
string befordot = null;
string afterdot = null;


if (dotindex >= 1)
{
befordot = num.Substring(0, dotindex);
afterdot = num.Substring(dotindex + 1);
}
else
{
befordot = num;
afterdot = "";
}


string pattern = "";
pattern = "(?<!\\.)(?<!\\d)(?(\\d{" + (befordot.Length + 1) + ",})(?<ml>))(?(ml)(?<mda>)\\d+|";


for (Int32 i = 0; i <= befordot.Length - 1; i++)
{


if (i < befordot.Length - 1)
{
pattern += "[" + befordot[i] + "-9]";
}
else
{
Int32 bd_lastdig = Convert.ToInt32(befordot[i].ToString());
pattern += "(?([" + (bd_lastdig + 1).ToString() + "-9])(?<mda>[" + (bd_lastdig + 1).ToString() + "-9])|[" + bd_lastdig + "-9]))";
}
}


pattern += "(?(\\.\\d)\\.)(?(mda)\\d*|";


if (dotindex >= 1)
{
string ad_firstdig = afterdot[0].ToString();
string ad_lastdig = afterdot[afterdot.Length - 1].ToString();


pattern += "(?([" + ad_firstdig + "-9])\\d";


if (afterdot.Length > 1)
{


for (Int32 i = 1; i <= afterdot.Length - 2; i++)
{
pattern += "(?([" + afterdot[i].ToString() + "-9])\\d|(?=[" + afterdot[i].ToString() + "-9]))";
}


pattern += "(?([" + ad_lastdig + "-9])\\d\\d*|(?=[" + ad_lastdig + "-9]))|(?=[" + ad_firstdig + "-9])))";
}
else
{
pattern += "\\d*|(?=[" + ad_firstdig + "-9])))";
}
}
else
{
pattern += "\\d*)";
}


return pattern;
}

مشابه همین رو میشه برای کوچکتر مساوی نوشت و برای اعداد منفی هم که کافیه از تابع عکس استفاده بشه و ...