PDA

View Full Version : مقایسه یک رشته با تعدادی زیادی ثابت ( از نوع رشته )



Mahmood_M
سه شنبه 12 تیر 1386, 22:19 عصر
با سلام
من در برنامم حدود 50 یا 60 تا ثابت دارم که همگی از نوع String هستند ( به عبارت دیگه برابر با یک رشته هستند )
من در یکی از توابع برنامم ، یک رشته رو از داخل یک متن میخونم ، حالا میخوام چک کنم که اگر این رشته خوانده شده ، با هر یک از ثابتهای بالا یکی بود ، متغیر مربوطه True بشه یا کلا یک عملیاتی انجام بشه ...
مشکل اینجاست که نمی دونم چطور باید عمل چک کردن رو انجام بدم ، اگر این رشته ها ( ثابتها ) در یک آرایه بودند ، میشد در یک حلقه با توجه به تعدادشون ، متنها رو چک کرد ...
ولی در این حالت که اونها به عنوان ثابت تعریف شدن ، چه روشی رو پیشنهاد میکنید ؟ آیا باید از 50 یا 60 عبارت if تو در تو استفاده کنم ؟!! یا راه بهتری هم هست ، با توجه به این که از دستور Case برای رشته ها نمی شه استفاده کرد ، یا اگر میشه من نتونستم استفاده کنم ، و اگر هم بشه باز هم باید کلشون چک بشن ولی باز از عبارات if بهتره ...

به هر حال اگر راهی به نظرتون می رسه بگید ...

با تشکر از همگی ...
موفق باشید ...

dkhatibi
چهارشنبه 13 تیر 1386, 09:40 صبح
راحت ترین کار ابتدا ثوابتت را داخل آرایه بریز

Mahmood_M
چهارشنبه 13 تیر 1386, 09:58 صبح
راحت ترین کار ابتدا ثوابتت را داخل آرایه بریز
به جز آرایه راه دیگه ای نیست ؟

Arman_1367
چهارشنبه 13 تیر 1386, 11:13 صبح
//With tStrings
Function CaseString(Str:String;Strs:tStrings;Upp:Boolean):I nteger;
Var I:integer;
Begin
Result:=-1;
If not Upp then
For I:=0 to Strs.Count-1 do
If Str=Strs[i] then
begin
Result:=i;
Break;
end;
If Upp then
For I:=0 to Strs.Count-1 do
If UpperCase(Str)=Uppercase(Strs[i]) then
begin
Result:=i;
Break;
end;
End;
//With Array
Function CaseString2(Str:String;Strs:Array of String;Upp:Boolean):Integer;
Var I:integer;
Begin
Result:=-1;
If not Upp then
For I:=Low(Strs) to High(Strs) do
If Str=Strs[i] then
begin
Result:=i;
Break;
end;
If Upp then
For I:=Low(Strs) to High(Strs) do
If UpperCase(Str)=Uppercase(Strs[i]) then
begin
Result:=i;
Break;
end;
End;

Mahmood_M
چهارشنبه 13 تیر 1386, 11:59 صبح
سلام
ممنون بابت کدها ، ولی این که از آرایه استفاده میکنه ...
من نمی خوام از آرایه ها استفاده کنم ( از اونها هم استفاده کنم باز هم مشکل مشابهی پیش میاد ! ) ...

با تشکر از همگی ...

dkhatibi
چهارشنبه 13 تیر 1386, 12:53 عصر
ثوابت رو به طور خاصی با نظم نامگذاری کردی یا نه؟

SYNDROME
چهارشنبه 13 تیر 1386, 12:58 عصر
با سلام

با سلام
من در برنامم حدود 50 یا 60 تا ثابت دارم که همگی از نوع String هستند ( به عبارت دیگه برابر با یک رشته هستند )
من در یکی از توابع برنامم ، یک رشته رو از داخل یک متن میخونم ، حالا میخوام چک کنم که اگر این رشته خوانده شده ، با هر یک از ثابتهای بالا یکی بود ، متغیر مربوطه True بشه یا کلا یک عملیاتی انجام بشه ...
مشکل اینجاست که نمی دونم چطور باید عمل چک کردن رو انجام بدم ، اگر این رشته ها ( ثابتها ) در یک آرایه بودند ، میشد در یک حلقه با توجه به تعدادشون ، متنها رو چک کرد ...
ولی در این حالت که اونها به عنوان ثابت تعریف شدن ، چه روشی رو پیشنهاد میکنید ؟ آیا باید از 50 یا 60 عبارت if تو در تو استفاده کنم ؟!! یا راه بهتری هم هست ، با توجه به این که از دستور Case برای رشته ها نمی شه استفاده کرد ، یا اگر میشه من نتونستم استفاده کنم ، و اگر هم بشه باز هم باید کلشون چک بشن ولی باز از عبارات if بهتره ...
به هر حال اگر راهی به نظرتون می رسه بگید ...
با تشکر از همگی ...
موفق باشید ...
با عرض شرمندگی
چرا از همان اول که اطلاعات را وارد می کنی درآرایه نمی ریزی ا مشکلاتتان حل شود؟(البته در بالا اشاره کردید که مشکل دارد ولی نگفتید چه مشکلی)
آیا نام متغییرهای شما به صورت منظم(A1 و A2 و A3 و. . . )تعریف شده است.

Mahmood_M
شنبه 16 تیر 1386, 13:27 عصر
با سلام
از جوابهاتون ممنونم ، من روشی که استفاده میکردم غلط بود ، روش تازه ای پیدا کردم ، امیدوارم مشکل حل بشه ، اگر حل نشد ، دوباره مزاحم خواهم شد ...

موفق باشید ...