PDA

View Full Version : چگونگی تعریف لیست جهت مقایسه در شرط if



روح اله معینی زاده
چهارشنبه 07 اردیبهشت 1384, 08:44 صبح
با سلام خدمت دوستان گرامی

چگونه می شود دو داده را در یک شرط If آورد و مقایسه کرد بدون این که از عملگرهای And و Or استفاده کرد؟

توضیح ::نوشتن:: :
فرض کنید در یک جعبه متن باید دو داده وارد شود مثلا 1 و 2. حال می خواهیم توسط شرط If بگوییم که اگه غیر از این دو عدد وارد شود خطا رخ داده است، چه باید انجام شود؟ می گوییم اگر متن مخالف 1 بود یا متن مخالف 2 آنگاه خطا رخ داده است. تا این‌جا فکر نمی کنم کار سختی باشد. ولی اگر قرار باشد مثلا 7 عدد وارد شود آنگاه این شرط خیلی بزرگ و ناخوانا خواهد شد. حال در این‌گونه موارد چه باید انجام داد؟

فکر می کنم در دلفی با قرار دادن علائم { } یا [ ] می شود این کار را انجام داد. آیا در وی بی هم این امکان یا شبیه این وجود دارد یا خیر؟

با احترام- خدانگهدار

یاشار
چهارشنبه 07 اردیبهشت 1384, 11:09 صبح
Select Case CInt(TextBox1.Text)
Case 1 To 10
MsgBox("Accepted")
Case 13, 17, 24, 25
MsgBox("Accepted")
Case Is < 0
MsgBox("Unacceptable")
Case Is > 25
MsgBox("Unthinkable")
End Select

روح اله معینی زاده
چهارشنبه 07 اردیبهشت 1384, 12:42 عصر
سلام خدمت دوست گرامی

ایول :oops: ایول :oops:

منظور من دقیقا به وسیله دستور If است و الا خودم از وجود دستور Select مطلعم، با این وجود از زحمتی که کشیده‌اید و جواب داده‌اید متشکرم.

من با خودم گفتم شاید در دات نت این چنین دستوراتی پشتیبانی شده باشد، اگر کسی می داند جواب دهد.

با احترام- خدانگهدار

یاشار
پنج شنبه 08 اردیبهشت 1384, 18:42 عصر
هه هه، خوب معذرت میخوام، من که نمیدونم شما چقدر بلدین ... :embr:

بعضی وقتها آدم یه سوالایی می‌بینه ...

یه دستور دیگه هم توی دات نت هست (البته تو VB6 هم بود) ولی فقط برای شرطهای کوتاهه و نسبت به عبارت اول یکی از آبجکت‌ها رو برمیگردونه ... یعنی در واقع یه جور فانکشن محسوب میشه



IIf(Experssion, Truepart, Falsepart)


حالا اگر از این هم مطلع بودید من رو به باد تمسخر نگیرید، من یه کم فکر میکنم همه چیز رو فقط خودم میدونم. از شوخی گذشته اون مطلبی که مطرح کردین چی هست و مزیتش چیه ؟ اصلا چطور ممکنه یه گذاره شرطی چند تا شرط رو بدون And و or بررسی کنه ؟

روح اله معینی زاده
شنبه 10 اردیبهشت 1384, 10:11 صبح
با سلام خدمت دوست گرامی

قصد من مسخره کردن نبودن. به هر حال ببخشید اگه چنین چیزی از نوشته‌هایم برداشت می شود. :oops:

این کد دلفی رو نگاه کنید


i := 1;
str := (Sender as TEdit).Text;
while i <= Length(Str) do
begin
if not (Str[i] in ['0','1','2','3','4','5','6','7','8','9']) then
Delete(Str, i, 1)
else
i := i + 1;
end;
(Sender as TEdit).Text := str;

امیدوارم منظورم رو گرفته باشد

Yashar_jr
شنبه 10 اردیبهشت 1384, 19:19 عصر
متاسفانه فعلا نمی‌تونم با اکانت خودم وارد سایت بشم.
گفتم که شوخی کردم ... می‌دونم قصدتون تمسخر نبود (من پر روتر از این حرفها هستم که به این راحتی‌ها بهم بر بخوره!)

من البته تا حالا طرف دلفی نرفتم، ولی تو VB.NET می‌تونید با استفاده از Array.IndexOf ببینید که شیی مورد نظرتون توی آرایه هست یا نه. کدی که بالا نوشتید تفریبا اینطوری می‌شه :





Dim Source As String = TextBox1.Text
Dim AcceptableChars() As Char = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
Dim i As Int32

While i < Source.Length - 1
If Array.IndexOf(AcceptableChars, Source.Chars(i)) = -1 Then
Source = Source.Remove(i, 1)
Else
i += 1
End If
End While

TextBox1.Text = Source



ولی شیی Char یه عالمه متد دیگه داره که این جور کارها رو راحت میکنه.





Dim Source As String = TextBox1.Text

For Each c As Char In Source.ToCharArray
If Not Char.IsDigit(c) Then
Source = Source.Remove(Source.IndexOf(c), 1)
End If
Next
TextBox1.Text = Source



در ضمن برای دستکاری String ها هیچ کلاسی قدرتمندتر از Reqular Expression نیست :




Dim Source As String = TextBox1.Text
TextBox1.Text = ""

Dim Pattern = "\d+" 'only digits
Dim Eng As New Regex(Pattern)
Dim MC As MatchCollection

MC = Eng.Matches(Source)

For Each m As Match In MC
TextBox1.Text &= m.Value
Next