PDA

View Full Version : مشکل space در جستجو



diba_gh
جمعه 27 فروردین 1389, 10:29 صبح
با سلام
من با جستجوی کلماتی که space دارند مشکل دارم و اون ها را در موقع search نشون نمی ده.
مثلا فرض کنید در هنگام ذخیره، کلمه ی " حسین پور" با یک space ذخیره شده ولی در هنگام سرچ ممکن است با دو space نوشته شود "حسین پور"، که این را در جستجو نمایش نمی دهد.

mohammad meta
جمعه 27 فروردین 1389, 10:59 صبح
با سلام
تنها راه شما استفاده از regular expression ها است یک بار برای همیشه یاد بگیر مفید ترین راه برای پردازش text است . search کن مطلب در موردش زیاد .

Argonod
جمعه 27 فروردین 1389, 11:34 صبح
از string.Contains استفاده کن که البته مختص اول کلمه نیست و هرچی که مشابه در رشته هست رو بصورت false و true برمیگردونه

mohammad meta
جمعه 27 فروردین 1389, 12:00 عصر
از string.Contains استفاده کن که البته مختص اول کلمه نیست و هرچی که مشابه در رشته هست رو بصورت false و true برمیگردونه
دوست عزیز فکر کنم شما منظور دوستمان را درست متوجه نشدید.
اگر منظورتان کد زیر است این راه درست عمل نمی کند چون به دنبال عین عبارت میگردد , وبا افزایش space بین کلمات درست کار نمی کند .


string s = "ali baba";
if (s.Contains("ali baba"))

MessageBox.Show("match");
}

راه دیگری هم وجود دارد :
در زمانی که عمل search را می خواهی انجام دهی ابتدا رشته وروددی را استاندارد کنید و بعد search را انجام دهید.

Argonod
جمعه 27 فروردین 1389, 12:43 عصر
شما درست میفرمایید دوست عزیز من فکر کردم منظور space در اول یا آخر رشته مورد نظر هست

diba_gh
جمعه 27 فروردین 1389, 15:51 عصر
ممنون می شم درمورد روش دومتون بیشتر توضیح بدین

mohammad meta
جمعه 27 فروردین 1389, 17:59 عصر
ممنون می شم درمورد روش دومتون بیشتر توضیح بدین

شما باید هم در زمان ذخیره کردن و هم در زمان search تمام فاصله های درون رشته را به یک فاصله تبدیل کنید . با همان متد contains دو فاصله را به یک فاصله تبدیل کنی .
اگه باز نتونستی بگیید کدشو بنویسم.

diba_gh
شنبه 28 فروردین 1389, 00:04 صبح
اگه باز نتونستی بگیید کدشو بنویسم.
اطلاعات من در این زمینه صفره ممنون می شم راهنمایی کنید

mohammad meta
شنبه 28 فروردین 1389, 09:55 صبح
هم ورودی فایل وهم قبل از جستجو به این شکل استاندارد شود :
اینم کد :


string s2 = " * ali baba # ";
s2 = s2.Trim();
while (s2.Contains(" "))
{
s2 = s2.Replace(" ", " ");
}
MessageBox.Show(s2);

seven7777777
شنبه 28 فروردین 1389, 11:55 صبح
به نظر من دو کار می تونین بکنید :
1. همون استفاده از Regular Expression ها .
2. با استفاده از Split کردن رشته مورد جستجو رو تکه تکه کنی و بعد در Query مربوط به جستجو همه اونها رو با OR بیاری . در این حالت ممکنه رشته هایی که یکی از بخش ها رو هم داشته باشن بیاره لذا بسته به نوع جستجو می تونی از AND استفاده کنی و ... .

seven7777777
دوشنبه 01 شهریور 1389, 09:21 صبح
دوست عزيز بازم سلام

ببينيد نميدونم راجع به Regular Expressionها چيزي خونديد يا نه ؟

منظور من از روش دومم اين بود كه شما بايد :
1. اول يه آرايه از رشته ها تعريف كن مثلا
string[] cons;
2. بعد بيا و با دستور Split كه متعلق به رشته هاست ، رشته اي كه داريو تقسيم كن و بريز داخل همون آرايه مثلا
cons = srchsen.Split(" "); .دقت كن كه كاراكتر جدا سازيتو بايد space تعريف كني .
3. حالا بيا و يه كوئري بساز كه توش يه چيزي مثل زير داشته باشه :

... WHERE name LIKE N'%حسين%' AND name LIKE N'%پور%'

چند نكته :
1. كلا Regular Expression ها استاندارد تر ، تميزتر و قشنگ ترند و روش درست اين كار هستند . كار كردن باهاشونم زياد سخت نيست .
2. روش بالا هم جواب ميده و كارتو راه ميندازه .
3. اگه نتونستي بگو من يه تيكه كد برات بنويسم بزارم . اگه سوالي هم بود بپرس .
4. ممكنه راه حل هاي بهتري هم باشه كه اساتيد اينجا انشا... مطرح كنن .

موفق باشي
--------------------

راستي يادم رفت بگم اين راه ممكنه توش باگ هم پيدا بشه ها . بايد روش كنترل داشته باشي مثلا اين روش هم حسين پور رو مياره و هم حسيني پور رو و هم حسين پور زاده و هم ميرحسين پور و ...

ديگه خودت بايد با كنترل AND و OR بين Clause هات و همينطور % اطراف مورد هاي سرچت مي توني كنترل بيشتري داشته باشي .

همينطور در موقع ثبت نام كاربر حتما اگه چندتا space خورده بود اونارو به يه دونه تبديل كن و در موقع جستجو هم مي توني به راحتي با همين روش جستجو كني . اين روش از روش بالايي هم بهتره ( البته محمد اين روشو بالا گفته بود ) .