PDA

View Full Version : جستجوی کلمه در فایل متنی ؟



fire-wizard
شنبه 10 شهریور 1386, 01:01 صبح
با سلام خدمت همه ی دوستان خوب و اساتید محترم.

من به یک کد نیاز دارم که یک کلمه ی مورد نظر رو که داخل یک Edit Box نوشتیم بیاد و اون رو از داخل یک فایل متنی که ادرسش رو دادیم برامون پیدا بکنه و بگه در خط چندم قرار داره و شماره ی خطی که اون کلمه توش هست رو به صورت پیام نمایش بده و اگه اون کلمه درون فایل متنی وجود نداشت عدد -1 رو نمایش بده.

نکته : فایل متنی مورد نظر در خطهاش فقط یک کلمه هست و جمله نیستن.

مثلا :
Delphi 1
Delphi 2
Delphi 3
Delphi 4
Delphi 5

به این صورت درون فایل متنی قرار دارن کلمات و کاربر مثلا اگه داخل Edit Box عبارت Delphi 3 رو وارد کرد برنامه بیاد و شماره ی خطی که این کلمه توش هست رو نشونمون بده که در اینجا میشه شمارهی 3 .

نکته ی 2 : میخوام حتی اگه هزاران کلمه در فایل متنی بود برنامه با سرعت به ما بگه کلمه ی مورد نظر در کدوم خط هست .

cybercoder
شنبه 10 شهریور 1386, 01:05 صبح
از دستورات کار با فایل ها باید استفاده کنی سوالت ....


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

اون دیگه بستگی به سیستمی داره که پروسس روش اجرا میشه

Arman_1367
شنبه 10 شهریور 1386, 01:25 صبح
Var Strs:TStringList;
i:Integer;
begin
if not OpenDialog1.Execute then exit;
Strs:=TStringList.Create;
Strs.LoadFromFile(OpenDialog1.FileName);
for I := 0 to Strs.Count - 1 do
begin
if Pos(Edit1.Text,Strs[i])>0 then
begin
ShowMessage(inttostr(i)+':'+IntToStr(Pos(Edit1.Tex t,Strs[i])));
exit;
end;
end;
strs.free;
end;

Hamid_PaK
شنبه 10 شهریور 1386, 15:22 عصر
روش دوست عزیز آرمان خوب هست ولی می توانستید از روال IndexOf کلاس نیز جهت برگرداندن شماره خط استفاده کنید.

یا حق ...

Valadi
شنبه 10 شهریور 1386, 15:32 عصر
کامپونت Rubicon برای سرچ در متن است
www.TamarackA.com

ضمنا قابلیت های جالبی داره

fire-wizard
شنبه 10 شهریور 1386, 17:01 عصر
با سلام مجدد خدمت دوستان.

من با کمک کد اقای Arman_1367 اون نمونه ی جستجو در فایل متنی رو ساختم ولی یک مشکلی وجدو داره که تا یک محدوده ای درست میگه که کلمه ی مشخص شده در خط چندم هست ولی در بعضی از خطها درست نمیگه و یکی دو تا پایین بالا میگه نمیدونم مشکلش چیه !!!!!1

نمونه رو میزارم همراه با اون فایل متنی که با یک حلقه ایجاد کردمش اون فایل متنی اینجوری هست که کلمات داخل همگی اولشون ap هست و جلوشون شماره ی خطی که توش قرار دارن نوشته شده مثل نمونه ی زیر


ap1
ap2
ap3
ap4
ap5
ap6
ap7
ap8
ap9
ap10
ap11
ap12
ap13
ap14
ap15
ap16
ap17
ap18
ap19
ap20
ap21
ap22
ap23
ap24
ap25

همینجوری ادامه داره تا ap834056 :گیج:

خوب حالا مثلا توی برنامه مینویسی ap415614 به جای اینکه بگه توی خط شماره ی 415614 قرار داره میگه تو ی خط 415613 قرار داره یعنی یک کمتر.

ولی اگه بنویسی ap197911 میگه توی خط 197911 قرار داره و درست میگه نمیدونم چرا اینجوری هست ؟؟؟؟

من اینجا هم فایل متنی رو میزارم هم نمونه رو تا دوستان محبت کنن و چک کنن و مشکل رو برطرف کنن .

Hamid.Kad
شنبه 10 شهریور 1386, 17:51 عصر
جناب fire-wizard
من برنامه شما رو چک کردم
مشکل اینه که بعضی از این اعداد در فایل شما موجود نیستند.
مثلاً ap306225 و ap626409 رو من نتونستم توی فایل پیدا کنم.

fire-wizard
شنبه 10 شهریور 1386, 18:49 عصر
خیلی ممنون ایا کدی هم هست که بشه مثل همین باشه ولی این دفعه شماره ی خط رو بدی و هر چی داخل اون خط بود نشونمون بده ؟

یعنی تقریبا بر عکس این نمونه .

hossein taghi zadeh
شنبه 10 شهریور 1386, 19:31 عصر
با سلام

از همون TStringList استفاده کنید.


ShowMessage( Strs[LineNumber - 1] );

fire-wizard
شنبه 10 شهریور 1386, 20:03 عصر
من در مورد اون TStringList زیاد چیزی بلد نیستم میشه یکم توضیح بدی راجع بهش ؟

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

Arman_1367
شنبه 10 شهریور 1386, 22:11 عصر
عزیز جان کد من ایندکس خط را میده.

fire-wizard
شنبه 10 شهریور 1386, 23:17 عصر
دوست عزیز من با کمی تغییر توی اون کد تونستم یه کاری کنم که اگه یک کلمه رو توی یک Edit Box نوشتی بگه در فایل متنی در کدوم خط قرار داره حالا من میخوام برعکس این کار رو هم بکنم . مثلا شماره ی خط رو بدم و اون بیاد کلمه ای که توی اون خط هست رو به ما بده .

اکه کمک بکنید ممنون میشم.

fire-wizard
شنبه 10 شهریور 1386, 23:22 عصر
راستی ایا روشی هست که سریع تر این کار رو انجام بده منظورم همون کاری که کلمه رو میدی میگه تو خط چندم هست . البته توی فایلهایی که تدعدا خطهاشون کم هست خیلی سریع این کار رو میکنه ولی توی فایلهایی که زیاد خط دارن یک 5 یا 6 ثانیه ای طول میکشه . مثل همون فایلی که داخل چند پست قبل گذاشتم.

Hamid_PaK
یک شنبه 11 شهریور 1386, 14:54 عصر
بهترین گزینه این است که از ترد استفاده کنید تا در مدت این زمان برنامه معلق نشود و حتی می توانید پیشرفت را نیز نمایش دهید.

یا حق ...

fire-wizard
یک شنبه 11 شهریور 1386, 16:57 عصر
یه نفر میتونه یه کد بهم بده که ما شماره ی خط رو توی یک Edit Box بنویسیم و بر روی دکمه کلیک کنیم و اون بیاد کلمه ی موجود در اون خط رو از فایل متنی بهمون بده ؟؟؟؟؟

Will_Smith
یک شنبه 11 شهریور 1386, 17:00 عصر
به تعداد دلخواه میکتونی از دستور Readln استفاده کنی و با هر بار اجرا به یک خط بعدی بری

fire-wizard
یک شنبه 11 شهریور 1386, 17:13 عصر
شما اون کدی که اقا ارمان داد دیدین یا نه ؟

اون کد میومد کلمه رو میگرفت و میگفت که در خط چندم در فایل متنی قرار داره خودم هم توسط اون کد یک نمونه درست کردم و در چند پست قبلی گذاشتم .

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

حالا اگه میشه کدش رو برام بزارید .

با تشکر فراوان.

Will_Smith
یک شنبه 11 شهریور 1386, 18:44 عصر
اگه واقعا فهمیده باشی که کد قبلی چکار میکنه اینو دیگه خودت میتونستی بنویسی
فرض کن که Strs همون TStrings باشه شما بادادن شماره خط به i میتونی به شماره ایندکس Strs[i] دسترسی پیدا کنی
Pos(Edit1.Text,Strs[i])d