View Full Version : تعداد کلمات موجود در یک متن
IranVB
سه شنبه 19 مهر 1390, 09:38 صبح
سلام دوستان میخواستم بپرسم آیا راهی وجود دارد که توسط آن پی ببریم که چه تعداد از یک کاراکتر در یک متن وجود دارد؟ مثلا" در متن "111222344511" چگونه پی ببرم که پنج تا عدد یک در متن وجود دارد؟ (البته سریعترین راه، که حجم زیادی از رم را اشغال نکند مثلا مجبور نباشم از حلقه استفاده کنم چون در متن های بزرگ همه سرعت برنامه ام پایین می آید می خواستم این کار را با API انجام دهم) آیا راهی وحود دارد؟ خیلی ممنون از همه دوستان گلم
just4froum
سه شنبه 19 مهر 1390, 15:40 عصر
با سلام
راجع به api نمی دانم ولی فکر میکنم حتی اگر api هم در این ضمینه باشه اونم به همین روش عمل کنه چون بالاخره باید تک تک حروف مقایسه بشن دیگه !!!
حالا ببین این کارتو راه میندازه یا نه
Dim x As Integer, Target As Integer
For x = 1 To Len(Text1.Text)
If InStr(1, Mid(Text1.Text, x, 1), "1") Then Target = Target + 1
Next x
موفق باشید.
محسن واژدی
سه شنبه 19 مهر 1390, 16:05 عصر
سلام علیکم
شاید کد زیر سریعتر باشد:
Public Function CountOfWord(sText$, sTargetWord$, Optional Compare As VbCompareMethod = vbTextCompare) As Long
On Error Resume Next
CountOfWord = UBound(Split(sText$, sTargetWord$, , Compare))
End Function
نمونه:
Private Sub Command1_Click()
MsgBox CountOfWord("ABDCGDGDAAAA444DFKJSDFKJSDFKJSDAAAASPOAS44", "A", vbBinaryCompare)
End Sub
موفق باشید
king ag
سه شنبه 19 مهر 1390, 18:09 عصر
برای مثال من یک متغیر ایجاد کردم به این صورت:
s = split(a,b)
حالا میخوام که از کد بالا استفاده کنم با این شرایط که برای مثال "a" خودش رو مقایسه کنه با تک تک حالت های اس
یعنی اگر s(0) برابر شده با "ab" و s(1) برابر شده با "a" خروجی کد بشه 1
خیلی ممنون
موفق باشید
محسن واژدی
سه شنبه 19 مهر 1390, 20:19 عصر
برای مثال من یک متغیر ایجاد کردم به این صورت:
s = split(a,b)
حالا میخوام که از کد بالا استفاده کنم با این شرایط که برای مثال "a" خودش رو مقایسه کنه با تک تک حالت های اس
یعنی اگر s(0) برابر شده با "ab" و s(1) برابر شده با "a" خروجی کد بشه 1
سلام علیکم
به این صورت نمیشود، متغیری که تابع split در آن شکسته میشود بایستی یک آرایه خالی و از نوع رشته ای (String) باشد در غیر اینصورت با خطای mismatch مواجه میشویم، درواقع تابع split تنها یک رشته را در قالب آرایه می شکند و بجز مقایسه کاراکتر جداکننده با کاراکترهای موجود در متن، هیچ مقایسه دیگری انجام نمیدهد
در کدهای پست قبل (پست3) تابع split شکسته و تنها تعداد آرایه های شکسته شده آن توسط UBoundدریافت و در متغیر CountOfWord ذخیره میشود
برای مقایسه یک کاراکتر با محتویات آرایه بایستی از حلقه استفاده کنیم
موفق باشید
mr-adler
شنبه 07 آبان 1390, 03:29 صبح
با سلام
راجع به api نمی دانم ولی فکر میکنم حتی اگر api هم در این ضمینه باشه اونم به همین روش عمل کنه چون بالاخره باید تک تک حروف مقایسه بشن دیگه !!!
حالا ببین این کارتو راه میندازه یا نه
Dim x As Integer, Target As Integer
For x = 1 To Len(Text1.Text)
If InStr(1, Mid(Text1.Text, x, 1), "1") Then Target = Target + 1
Next x
موفق باشید.
سلام
کد های جالبی بودن . دستتون درد نکنه...
اما در مورد کد اقای واژدی فعلا در سطح بنده نیست متاسفانه. ایشالا اطلاعاتمون بیشتر شد برمیگردیم میخونیم دوباره...
من دنبال کدی هستم کهکاراکتر های مشترک رو برامون مشخص کنه و حد الامکان تعدادشون رو بگه.
مثلا در متن 1234565 بگه که کاراکتر 5 تکرار شده به تعداد 2 دفعه . هر چی تلاش کردن موفق نشدم.
کدی که دوست عزیز just4froum (http://barnamenevis.org/member.php?211054-just4froum) دادن دنبال یک کاراکتر خاص میگرده من میخوام همه کاراکتر ها رو چک کنه و مشترکات و تعدادشون رو بگه.
ممنونم
محسن واژدی
شنبه 07 آبان 1390, 07:54 صبح
سلام علیکم
هم میتوانید کد پست 3 را ویرایش کنید و هم از کد زیر استفاده کنید:
Public Sub SimWords(ByVal sText$, lListBox As ListBox)
On Error Resume Next
Dim iPL&
Dim sCur_chr$
lListBox.Clear
Do
iPL& = Len(sText$)
sCur_chr$ = Mid(sText$, 1, 1)
sText$ = Replace(sText$, sCur_chr$, Empty, , , vbTextCompare)
lListBox.AddItem sCur_chr$ & vbTab & iPL& - Len(sText$)
Loop Until sText$ = Empty
End Sub
به عنوان مثال:
Private Sub Command1_Click()
SimWords "google.com", List1 'g:2 , o:3 , l:1 ,...
End Sub
موفق باشید
mr-adler
شنبه 07 آبان 1390, 14:13 عصر
خودشه همینه...
ممنونم
فقط اگه میشه در مورد این چند مورد یکم توضیح بدید. بقیشو فهمیدم تقریبا...
1.vbTab
2.دستور
SimWords text1.text, List1
در اینجا مثلا SimWords تقریبا شبیه کلمه کلیدی شده؟
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.