مسائل مربوط به رشته ها در ویژوال بیسیک

pilevar

Member
خودت تابعشو بنویس.

کاری نداره.

اول باید بگی رشته رو پیدا کنه به جای اون پارامتر دوم رو بزاره.

من تا نیم ساعت دیگه مینوسم برات میزارم.

پیروز باشید
 

saalek110

Well-Known Member
من این طوری نوشتم تا هر دو کلمه جایگزین شود:
کد:
Private Sub Command1_Click()
 mystring = Replace(Text1.Text, "hello", "salam")
Label1.Caption = Replace(mystring, "father", "pedar")
End Sub
 

pilevar

Member
خدمت شما:

ببین خوب جواب میده:
کد:
Function rep(stname As String, st1 As String, strep As String) As String
k = stname
For i = 1 To Len(k)
    w = Mid(k, i, Len(st1))
    If st1 = w Then
        m = Left(k, i - 1)
        n = Right(k, (Len(k) - Len(st1)) - i + 1)
        k = m & strep & n
    End If
Next
rep = k
End Function

آرگومان اول اسم متغییر مادر هست(رشته)
آرگومان دوم کلمه ای که جستجو کند
آرگومان سوم کلمه ای که میخواهید جایگزین شود.

اسم تابع هم rep

فراخوانی:
کد:
a=rep(Text1.Text, "hello", "salam")
هرچی hello هست در text1.text مزاره salam

موفق و پیروز باشید
 

Learn65

Member
سلام
خسته نباشید
چه جوری میتونم یک عدد رو از یک تکست گرفت و اونو وارو نه نشون داد
ممنون میشم
 

ua741

New Member
توابع خاص در vb

باسلام
آیا در vb تابعی هست که با استفاده از اون یک رشته رو در یک رشته دیگه جستجو کنیم؟
یا اگه وجود نداره اگه کسی سورسی در این مورد بذاره ممنون میشم
 

the_king

مدیرکل انجمن
تابع InStr برای جستجوی موقعیت یک رشته در رشته دیگری بکار می رود :
کد:
[B]InStr[/B]([start, ]string1, string2[, compare])

start موقعیت ای را مشخص می کند که جستجو از آن آغاز می شود، مثلا مقدار 1 مشخص کننده جستجو از اول رشته است.
این پارامتر اختیاری است و اگر جستجو از اول رشته انجام می شود می توان آنرا وارد نکرد.
string1 رشته ای است که جستجو باید در درون آن آغاز شود.
string2 رشته ای است که باید دنبال آن بگردد.
compare مشخص کننده نوع جستجو است، اگر مقدار آن 0 (معادل vbBinaryCompare) باشد، جستجو بصورت باینری
انجام می شود. مثلا در جستجوی باینری کاراکتر a از کاراکتر A بزرگتر است و رشته "ALI" با رشته "ali" یکسان نیستند.
اگر مقدار compare برابر 1 (معادل vbTextCompare) باشد، جستجو بصورت متنی انجام می شود.
مثلا در جستجوی متنی کاراکتر a با کاراکتر "A" معادل است و رشته "ALI" با رشته "ali" یکسان هستند.
compare یک پارامتر اختیاری است و اگر وارد نشود مقدار پیشفرض آن 0 (معادل با vbBinaryCompare) است.

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

مثلا اگر بخواهیم در رشته "This is a test" رشته "is" را از اولین کاراکتر به بعد جستجو کنیم می نویسیم :
کد:
    Pos = InStr(1, "This is a test", "is")
یا بصورت خلاصه تر می نویسیم :
کد:
    Pos = InStr("This is a test", "is")
مقدار Pos بعد از اجرای این دستور برابر 3 خواهد بود.

اگر بخواهیم در رشته "This is a test" رشته "is" را از چهارمین کاراکتر به بعد جستجو کنیم می نویسیم :
کد:
    Pos = InStr(4, "This is a test", "is")
مقدار Pos بعد از اجرای این دستور برابر 6 خواهد بود.

تابع InStrRev جستجو را برخلاف جهت InStr از آخر رشته به اول آن انجام می دهد :
کد:
[B]InstrRev[/B](string1, string2[, start[, compare]])
پارامتر های آن مشابه همنام آنها در InStr هستند با این تفاوت که مقدار پیشفرض start برابر منفی یک (1-) است
و در اینصورت جستجو از آخرین کاراکتر رشته string1 شروع می شود.

اگر بخواهیم در رشته "This is a test" رشته "is" را از آخر رشته به سمت اول آن جستجو کنیم می نویسیم :
کد:
    Pos = InStrRev("This is a test", "is")
مقدار Pos بعد از اجرای این دستور برابر 6 خواهد بود.

اگر بخواهیم در رشته "This is a test" رشته "is" را از چهارمین کاراکتر رشته به سمت اول آن جستجو کنیم می نویسیم :
کد:
    Pos = InStrRev("This is a test", "is", 4)
مقدار Pos بعد از اجرای این دستور برابر 3 خواهد بود.
 

saalek110

Well-Known Member
اگر منظورتان را درست متوجه شده باشم این طور:
کد:
kandid1 = UCase(InputBox("kandid 1:", "kandidha"))
 

kemiaonline

Banned
معرفی تابع str ؟ کمکم کنید

سلام
تورو خدا جوابمو بدید
من میخوام بدونم کار str چیه
اگه لطف کنین و در باره تابع str تعریف کنین خیلی ممنون میشم
مثلا"
text1.text=text1.text+str(I)
خیلی جاها اینو دیدم اما
هنوز نمیدونم str چیه و چیکار میکنه
اصلا" معنیش چیه
 

saalek110

Well-Known Member
نقل از :
http://www.aivosto.com/vbtips/stringopt2.html
CStr and Str$. These slow functions are used to convert other data types to a string. You typically use them to convert a numeric value into a string. CStr is much faster than Str$. (Tested for integer input value 32.)

You can save time by replacing calls to Str$ with CStr. This is not a straightforward task, though, because CStr and Str$ return different values. CStr returns a localized string, while Str$ returns a non-localized one. What is more, Str$ prefixes positive values with a space. As an example, CStr(1.2) returns "1,2" in several European locales. Str$(1.2) always returns " 1.2". Thus, you can trust that Str$ always works the same way, while CStr works differently in different locales. If you simply replace calls to Str$ with CStr, your program may fail later if it fails to interpret the resulting localized string. The following table compares Str and CStr in the Finnish locale. The results will look similar in several non-English locales.
2me5lxw.gif

یک برنامه با دو باتون و یک تکست باکس بسازید و با کد زیر مطابق کنید:
کد:
Option Explicit
Dim I As Integer

Private Sub Command1_Click()
I = 25
Text1.Text = Text1.Text + Str(I)
End Sub
[COLOR="Red"]
Private Sub Command2_Click()
I = 25
Text1.Text = Text1.Text + I
End Sub[/COLOR]
در باتون 2 خطای Type mismatch را دریافت می کنید.
زیرا دارید یک عدد را با رشته جمع می کنید و در یک رشته می ریزید. و ممکن نیست.
پس باید اول عدد به رشته تبدیل شود.
 

saalek110

Well-Known Member
تبدیل عدد کسری به اعشاری

b9ysw.gif

من می خواهم از خودم این برنامه را بنویسم. یا کمک گیری از سایت:
http://www.aivosto.com/vbtips/stringopt2.html

ابتدا یک باتون و دو تکست باکس اضافه کنید به فرم. کد زیر:
کد:
Private Sub Command1_Click()
Text2.Text = Text1.Text
End Sub
باعث میشه هر چی در تکست باکس 1 باشه بره تو تکست باکس دوم.

کد زیر:
کد:
Private Sub Command1_Click()
Text2.Text = InStr(Text1.Text, "/")
End Sub
وقتی که در تکست باکس اول 12377/34 باشد در تکست باکس دوم عدد 6 را می نویسه یعتی ششمی ممیز است.

کد زیر :
کد:
Option Explicit
Dim mahale_momayez As Integer
Private Sub Command1_Click()
mahale_momayez = InStr(Text1.Text, "/")
Text2.Text = Left(Text1.Text, mahale_momayez - 1)
End Sub
وقتی در تکست 1 مقدار 3456/265 را داشته باشیم در تکست باکس دومی عدد 3456 را می نویسد.

برنامه نهایی:
کد:
Option Explicit
Dim mahale_momayez As Integer
Dim samte_chape_momayez As Integer
Dim samte_raste_momayez As Integer
Dim toole_reshteh As Integer
Private Sub Command1_Click()
mahale_momayez = InStr(Text1.Text, "/")
samte_chape_momayez = Val(Left(Text1.Text, mahale_momayez - 1))
toole_reshteh = Len(Text1.Text)
samte_raste_momayez = Val(Right(Text1.Text, toole_reshteh - mahale_momayez))
Text2.Text = samte_chape_momayez / samte_raste_momayez
End Sub

نتیجه اجرا: با دادن یک چهارم در تکس باکس دوم بیست و 5 صدم را دریافت می کنیم.

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

تابع val :
Val(S) returns the numeric value contained in S (non-localized).
در خط :
کد:
Text2.Text = samte_chape_momayez / samte_raste_momayez
شاید باید می نوشتیم:
کد:
Text2.Text = str ( samte_chape_momayez / samte_raste_momayez )
یعنی عدد را باز به رشته تبدیل کنیم.
تابع str :
Str$(x) returns the string representation of x (not localized).
ولی انگار وی بی خودش اتوماتیک تبدیل را انجام می دهد.
 

kemiaonline

Banned
معرفی kayascci

سلام
خواهشن کمکم کنید
من میخوام یه نفر برام در مورد کد های اسکی تعریف کنه و کاربرد اونها رو برام بگه
و نحوه ی استفاده از اون ها
کلا" میگم از این کد های اسکی هیچی نمیدونم و دوست دارم هرچیزی در مورد کدهای اسکی وجود داره بدونم
بگید چه کار هایی انجام میده و چه جوری
****************
در ضمن من همه چیز برنامه نویسی رو قاطی کردم
چون برنامه نویسی رو نامظنم خوندم الان سر از پا نمیشناسم و نمیدونم با برنامه نویسی باید چیکار کرد
یعنی همین که چشمم به یه کد جدید میخوره وحشت میکنم
 

kemiaonline

Banned
لطــــــــــــــــــــفا"
خواهش میکنم هرکی میخواد توضیح بده به زبون ساده و البته صحیح همراه با مثال بگه
دیگه عرضی ندارم
ممننون میشم
 

kemiaonline

Banned
str

سلام جناب سالک
همونطور که فرموده بودید تایپیک جداگانه ای زدم
تا همه استفاده کنن
:D
در باره ی تابع str داشتم میگفتم
شما گفتید عدد رو به رشته تبدیل میکنه
میخواستم بدونم در خصوص
دستورایجاد حلقه هم همینکارو میکنه
مثلا"
for i = 0 to 100 step 5
text1.text=text1.text+str(I) k
اون k بالا رو همینجوری نوشتم تا پرانز I درست شه
next i
کار str در کد بالا چیه؟
و جالبه اگه تابع satr رو ننویسیم برنامه خطا میده
یعنی در بالا str عدد ها رو به رشته تبدیل میکنه و
بعد در تکست یک قرار میده ؟
 

saalek110

Well-Known Member
سلام.
کدها را در تگ کد قرار بدهید.
[ code ]
کدها را اینجا پیست کنید. البته من بین کاراکترها فاصله گذاشتم تا عمل نکنه. ولی شما همه کاراکترها را چسبان بنویسید.
[ / code]
در ادیتور کامل علامت # را که بزنید خودش این تگ باز و بسته را ایجاد می کنه و نیازی به تایپ نیست.
------------------------------
اما راجع به سئوال شما:

تمرین اول:
یک باتون و یک تکست باکس به فرم بیافزایید و کد زیر را وارد کنید:
کد:
Option Explicit
Dim I As Integer
Private Sub Command1_Click()
For I = 0 To 100 Step 5
Text1.Text = Text1.Text + Str(I)
Next I
End Sub

نتیجه اجرا:
c1.gif

تمرین دوم:
کد:
Option Explicit
Dim I As Integer
Private Sub Command1_Click()
For I = 0 To 100 Step 5
Text1.Text = I
Next I
End Sub
نتیجه اجرا:
عدد 100 را خواهیم داشت در تکست باکس . بدون خطا.

تفاوت تمرین اول و دوم اینه که در دومی تبدیلات اتوماتیک انجام میشه. یعنی شاید فرض میشه تکست باکس عددی است.
ولی در تمرین اول نمیشه رشته را با عدد جمع کرد. پس اول باید هر دو رشته بشوند.
 

saalek110

Well-Known Member
در تمرین دوم پست قبل فکر کنم ویژوال بیسیک میاد فرض می کنه محتوای تکست باکس قراره عددی بشه و خودش اتوماتیک تبدیل می کنه. ولی در مثالی که شما نوشتید Text1.Text = text1.text+I دیگه اینجا اون عملکرد اتوماتیک کار نمی کنه و ویژوال بیسیک منتظظره تا خودتون در text1.text+I هر دو را از یک Type بکنید. یعنی مثلا هر دو را رشته کنید. که str(I) باعث تبدیل به رشته میشه. که باید این طوری بنویسید:
کد:
Option Explicit
Dim I As Integer
Private Sub Command1_Click()
For I = 0 To 100 Step 5
[COLOR="Blue"]
Text1.Text = Text1.Text + Str(I)[/COLOR]
Next I
End Sub

یا می توانید هر دو را عددی کنید این طوری:
کد:
Option Explicit
Dim I As Integer
Private Sub Command1_Click()
For I = 0 To 100 Step 5
[COLOR="Blue"]Text1.Text = Val(Text1.Text) + I[/COLOR]
Next I
End Sub
 

جدیدترین ارسال ها

بالا