PDA

View Full Version : جستجو در memo



nsco_nsco
یک شنبه 18 اردیبهشت 1390, 22:17 عصر
سلام دوستان
من می خوام نوشته ای که در یک memo وجود دارد رو مثلا کلمه ایش رو در یک ادیت بنویسم و اون بره در memoجستجو کند و در صورت وجود یک لیبل رو بنویسه موجود می باشد ممنون می شوم کمک کنید با تشکر :قلب:

SAASTN
یک شنبه 18 اردیبهشت 1390, 22:42 عصر
خوب تابع Pos این کار رو می کنه، کافیه در تمام سطور Memo با استفاده از تابع Pos کلمه مد نظر رو جستجو کنید، در صورتی که خروجی این تابع بیشتر از 0 بود متن در Memo موجوده. برای اطلاعات بیشتر از پارامترها و خروجی Pos از راهنمای دلفی استفاده کنید.

nsco_nsco
یک شنبه 18 اردیبهشت 1390, 23:15 عصر
سلام ممنون از پاسختون ای نرو برای اونهایی که بلد نیستن قرار می دهم :


var s : string;
i : integer;

s:='DELPHI PROGRAMMING';
i:=Pos('HI PR',s);
//i=5;


باز هم ممنون امیدوارم موفق باشید :قلب:

nsco_nsco
یک شنبه 18 اردیبهشت 1390, 23:20 عصر
باز هم سلام اگر چند تا کلمه مثل هم در memo باشد باید چطوری این ها رو جستجو کرد ؟؟؟

tdkhakpur
دوشنبه 19 اردیبهشت 1390, 01:45 صبح
اگر چند تا کلمه مثل هم در memo باشد باید چطوری این ها رو جستجو کرد ؟؟؟
کد اضافه شده دومین کلمه رو پیدا میکنه میتونید ادامه بدید...


var
s : string;
i : integer;
begin
s:='DELPHI PROGRAMMING DELPHI';
i:=Pos('HI',s);
//i:=5;
i:=Pos('HI',string(@s[i+Length('HI')]))+i;
//i:=23;
end;

SAASTN
دوشنبه 19 اردیبهشت 1390, 08:10 صبح
کد اضافه شده دومین کلمه رو پیدا میکنه میتونید ادامه بدید...
به جای این کد میشه از تابع PosEx که در یونیت StrUtils تعریف شده هم استفاده کرد. این تابع یه پارامتر دیگه تحت عنوان Offset داره که اندیس شروع جستجو رو تعیین می کنه.
Index := 0;
repeat
Index := PosEx(SubStr, Str, Index + 1);
if (Index > 0) and (Index <= Length(Str)) then
// Do Somthing ...
until (Index < 1) or (Index > Length(Str));

nsco_nsco
دوشنبه 19 اردیبهشت 1390, 12:33 عصر
کد اضافه شده دومین کلمه رو پیدا میکنه میتونید ادامه بدید...


var
s : string;
i : integer;
begin
s:='DELPHI PROGRAMMING DELPHI';
i:=Pos('HI',s);
//i:=5;
i:=Pos('HI',string(@s[i+Length('HI')]))+i;
//i:=23;
end;


سلام ممنون از قرار دادن اینکد این کد رو که قرار می دهم فقط اولین مورد رو پیدا می کند و در صورتی که چند مورد باشد به آنها نمی پردازد ممنون می شوم یاری کنید .

tdkhakpur
دوشنبه 19 اردیبهشت 1390, 18:29 عصر
فقط اولین مورد رو پیدا می کند و در صورتی که چند مورد باشد به آنها نمی پردازد


function FindIndexedWordPos(Text, SrchText:string; index:integer):integer;
var
New_Pos, i, len : integer;
Find_Pos:integer;
begin
len := Length(SrchText);
Find_Pos := Pos(SrchText, Text);
for i:=1 to index do
begin
New_Pos := Pos(SrchText, pchar(@Text[Find_Pos+len]));
if New_Pos<>0 then
Find_Pos := Find_Pos + (len-1) + New_Pos
else begin
Find_Pos :=0;
break;
end
end;
result := Find_Pos;
end;
//--------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
s : string;
begin
s:='DELPHI PROGRAMMING DELPHI';
i := FindIndexedWordPos(s, 'HI', 0);
//i=5
i := FindIndexedWordPos(s, 'HI', 1);
//i=24
end;
//--------------------------------------------------


0 برای جستجوی اولین کلمه و 1 برای دومین و ...
اگر عدد 0 برگشت داده شود یعنی i صفر بشود چیزی پیدا نکرده.