ورود

View Full Version : سوال: نمایش مختصری از متن



hamid_isf_1360
چهارشنبه 21 اردیبهشت 1390, 05:41 صبح
با سلام خدمت دوستان عزیز
بانکی دارم برای ذخیره مقالات با سه فیلد شامل شماره مقاله و عنوان مقاله و متن مقاله
حال اگر بخواهم داخل متن مقالات جستجو کنم و به دنبال کلمه ای خاص بگردم و بعد بیام برای اینکه کاربر بهتر متوجه بشه مختصری از متن مقالاتی را که با این کلمه شروع شده را داخل یک گرید بریزم
باید چیکار کنم.
من از کد زیر استفاده کردم:


ADODataSet1.CommandText:='Select key,title,content From article where content like :m';
ADODataSet1.Parameters.ParamValues['m']:= '%'+trim(textSearch)+'%';
DataModule1.ADODataSetSearch1.Open
DBGridEh1.DataSource:=DataSource1


ولی مشکلم اینه که کدهای بالا کل متن مقالاتی که شامل آن کلمه خاص است را برای من بازآوری می کند
در صورتیکه من می خواهم مختصری از متن مقاله که دقیقا با آن واژه خاص شروع می شود را داشته باشم.

مثلا فرض کنید واژه مورد جستجو ملکول است.که حاصل جستجو مثل زیر بیاید:
ملکول های آب داری خاصیت .......
ملکول های یک ماده کوچکترین عضو .....
ملکول های نیتروژن داری بالاترین حالت .......



و به همین ترتیب تا آخر در گیرید نشون داده بشند تا من بعد به کاربر این امکان را بدم که با فشار این متن مختصر به متن کامل مقاله هدایت بشه

با تشکر
ببخشید پر حرفی کردم

M_Maskout
چهارشنبه 21 اردیبهشت 1390, 08:29 صبح
سلام
می‌تونید با استفاده از تابع Left تو متن CommandText استفاده کنید:


ADODataSet1.CommandText:='Select key,title,Left(content, 30)+''...'' As content From article where content like :m';

hamid_isf_1360
چهارشنبه 21 اردیبهشت 1390, 11:59 صبح
ضمن تشکر از شما دوست عزیز
کد شما را تست کردم ولی جواب نگرفتم
کد شما دسته ای از جستجو های 30 کاراکتری را برای من برگرداند که به عنوان مثال واژه ملکول در آن مقاله بوده نه الزاما در این 30 کاراکتر

همان طور که در عکس زیر مشادهد می کنید من واژه حسادت را جستجو کردم و می خوام همان طور که در گرید زیر مشاهده می کنید همه موارد جستجو با واژه حسادت شروع بشه که همان طور که می بینید نشده.

ممنون اگر پاسخ بدید.


69813

mohsen24000
چهارشنبه 21 اردیبهشت 1390, 12:09 عصر
این کار رو با Sqlite خیلی راحت میشه انجام داد...


SELECT snippet(article , '[', ']', '...') FROM article WHERE content MATCH '"حسادت"'

M_Maskout
چهارشنبه 21 اردیبهشت 1390, 14:59 عصر
کد شما را تست کردم ولی جواب نگرفتم
کد شما دسته ای از جستجو های 30 کاراکتری را برای من برگرداند که به عنوان مثال واژه ملکول در آن مقاله بوده نه الزاما در این 30 کاراکتر

سلام
کم دقتی بنده رو نادیده بگیرین؛ کدی که گذاشتم اصولاً کار شما رو انجام می‌ده ولی تغییری در اون لازم هست، و شما باید بعد از عبارت As، نام دیگه‌ای (مثلاً subcontent) رو بذارین. منتها در این صورت لازمه از نام جدید به عنوان نام فیلد تو grid استفاده کنید.
من به قسمت آخر عبارت شما (where content like :m) دقت نکرده بودم.:خجالت:



ADODataSet1.CommandText:='Select key,title,Left(content, 30)+''...'' As subcontent From article where content like :m';

mohsen24000
چهارشنبه 21 اردیبهشت 1390, 15:05 عصر
کم دقتی بنده رو نادیده بگیرین؛ کدی که گذاشتم اصولاً کار شما رو انجام می‌ده
با این وصف باز هم مشکل ایشان حل نمی شود...!!!
چون که شما 30 کاراکتر اول عبارت مورد جستجو رو بر میگردونید ولی سوال کننده به دنبال نمایش مثلا 30 کاراکتری است که با کلمه مورد جستجو شروع می شود، هستند.

mohsen24000
چهارشنبه 21 اردیبهشت 1390, 15:36 عصر
select mid(content,instr(content,'phrase'),30)+'...' as a
from article
where instr(content,'phrase')>0

hamid_isf_1360
پنج شنبه 22 اردیبهشت 1390, 01:07 صبح
ممنون و تشکر فراوان از شما