View Full Version : تشخیص حرف فارسی
aleas2
جمعه 25 مرداد 1392, 08:14 صبح
سلام خسته نباشید دوستان قبلا در این مورد زیاد بحث شده ولی خب من دنبال ساده ترین شکل ممکن هستم
میخوام متن text برسی کنه اگر داخل text حتی یک کلمه فارسی وارد شده بود یه پیغام به کاربر بده در غیر اینصورت عکس العملی نشون نده
m.4.r.m
جمعه 25 مرداد 1392, 08:51 صبح
شما شما با یک حلقه میای از اول تا انتهای رشته رو چک می کنی اگر کد اسکلی حروف فارسی توش بود ارور میده برای این هم که حروف فارسی رو تشخیص بدین یا آرایه ای از حروف رو درست کنین یا با کدهای اسکی حروف می تونید چک کنید .
این کد ها برای تشخیص اعداد و حروف در رشته رو مشخص می کنند
Function GetNumbers(Value As String) As String
Dim Index As Long
Dim Final As String
For Index = 1 To Len(Value)
If Mid(Value, Index, 1) Like "[0-9]" Then
Final = Final & Mid(Value, Index, 1)
End If
Next
GetNumbers = Final
End Function
Function GetString(Value As String) As String
Dim Index As Long
Dim Final As String
For Index = 1 To Len(Value)
If Mid(Value, Index, 1) Like "[a-z]" Then
Final = Final & Mid(Value, Index, 1)
End If
Next
GetString = Final
End Function
Private Sub Form_Load()
MsgBox GetNumbers("1gg4345hh45353")
MsgBox GetString("1gg4345hh45353")
End Sub
aleas2
جمعه 25 مرداد 1392, 09:04 صبح
ممنون این کدی شما گذاشتین برای حروف انگلیسی شرمنده فقط کد اسکی حروف فارسی از چند تا چنده؟!(فقط حروف فارسی نه اعداد فارسی!)
m.4.r.m
جمعه 25 مرداد 1392, 09:04 صبح
کارت رو راحت کردم اینو تست کن ببین جواب میگیری
Function GetString(Value As String) As String
Dim Index As Long
Dim Final As String
For Index = 1 To Len(Value)
If Mid(Value, Index, 1) Like "[آ-ي]" Then
Final = Final & Mid(Value, Index, 1)
End If
Next
GetString = Final
End Function
اگه به مشکل بر خوردی این هم کد حروف فارسی
آ آ
ئ ئ
ا ا
ب ب
ت ت
ث ث
ج ج
ح ح
خ خ
د د
ذ ذ
ر ر
ز ز
س س
ش ش
ص ص
ض ض
ط ط
ظ ظ
ع ع
غ غ
ف ف
ق ق
ل ل
م م
ن ن
ه ه
و و
پ پ
چ چ
ژ ژ
ک ک
گ گ
ی ی
miladatashin
جمعه 25 مرداد 1392, 11:52 صبح
الگوریتمی که m.4.r.m عزیز گفتن اصلا برای متن های طولانی مناسب نیست و مرتبه زمانی برنامه خیلی زیاد میشه. اگه متن طولانی هست پیشنهاد میکنم به جای اینکه تک تک حروف رو چک کنید تو یک حلقه 32 تا حروف فارسی رو توی رشته با تابع instr جستجو کنید. در بدترین شرایط بعد از اینکه 32 بار تابع instr اجرا بشه خروجی مشخص میشه.
m.4.r.m
جمعه 25 مرداد 1392, 16:01 عصر
کاش یک تست می کردی دوست عزیز شما این متن رو بده به تکست باکس بعد خروجی بگیر ببین چند ثانیه طول میکشه ؟
{
\rtf1\fbidis\ansi\deff0{\fonttbl{\f0\fnil\fcharset 0 Tahoma;}{\f1\fnil\fcharset178 Tahoma;}{\f2\fnil\fcharset238 Tahoma;}}
\viewkind4\uc1\pard\ltrpar\lang1065\f0\fs17 |^uxk7cnksou\'80jp~\'84\{oxz|\}H\rdblquote v\f1\rtlch\'81\'8b\'8b\rquote\ldblquote\'82\'8d\'9 d\f0\ltrch \f1\rtlch\'8a\f0\ltrch U\'82\f1\rtlch\'8d\endash\rquote\endash\'87\rquote \'90\endash\'90\f0\ltrch\'a2\'a4\emdash\'a7dU\f1\r tlch\'8a\'98\f0\ltrch\~\'a8\'a7\'9cw\f1\rtlch\'ba\ 'b9\f0\ltrch\'9b\'a6r\u8205?\'a9\'b2\'ae\'b2\'a3\' ae\'ac\'b2\'ac\'be\f1\rtlch\'c0\'b3\'c3\'81\'88\'8 a\f0\ltrch s\'a8\'b6\'be\f1\rtlch\'c6\'c5\'ba\bullet\'d8\'d9\ f0\ltrch jh\'bb\f1\rtlch\'d6\'ca\'c7\'da\'cf\'ce\'d4\'cb\f2 \ltrch\u339?\f1\rtlch\'c5\'df\'ce\'9d\'c9\'de\'d0\ f0\ltrch\'e2\f1\rtlch\'d5\'ce\'df\f0\ltrch\'e8\'e7 \f1\rtlch\'e6\'d8\f0\ltrch\'ea\f1\rtlch\'d5\'e6\'d c\f0\ltrch\'ea\f1\rtlch\'e4\'af\'af\'b6\'b6\'de\f0 \ltrch\'e9\'b4\f1\rtlch\'e1\'ec\'fa\'b9\'c0\'aa\'e 6\'d5\f0\ltrch\'fb\'02\'04\u1612?\u8206?\f1\rtlch\ 'fe\'e6\f0\ltrch\'fc\f1\rtlch\'fe\f0\ltrch\'fb\'04 \'fc\'b9\f1\rtlch\'ed\f0\ltrch\'05\tab\'03
\par \'14\u8206?\'ae\'ac\f1\rtlch\'ff\f0\ltrch\'15\'07\ '19\f1\rtlch\'c7\'fe\f0\ltrch\'0f\'1d\'1f\'16\'1d\ '1d\f1\rtlch\'ec'\'e3\f0\ltrch\'e0\f1\rtlch\'e5\'e 4\'e3\'e6\f0\ltrch\'e7\'e8\f1\rtlch\'c6\'c4\f0\ltr ch\'18-\'1f\f1\rtlch 1\'df\f0\ltrch\'07+/)\'02\'12\f1\rtlch 6\f0\ltrch /\'e8\'10482\f1\rtlch\'da\'d8\f0\ltrch ,A3E\u1614?0\'17GHEC>=QGNN>\'ee\f1\rtlch\'ec\f0\ltrch @UGY\'087KXQ*20?\u8206?\'fbOdVh\'17N^lnell<3/7\'10\'0eavhz)Mzy\}o\}\'89N_|w\'87\'85\f1\rtlch\'8 a\f0\ltrch\'87\f1\rtlch\'8e\f0\ltrch (&y\f1\rtlch\'8e\f0\ltrch\'80\rquote A\}u\'89\f1\rtlch\'98\f0\ltrch\endash\endash\endas h\'9c\f1\rtlch\'8f\}\lquote\~\'a3\'9b\'a4\'8e?=\'9 0\f0\ltrch\'a5\emdash\'a9X\'8b\f1\rtlch\'9f\'ae\'b 1\'a9\'b2\f0\ltrch\'82\'af\'a5\'a7\'80qvxTR\'a5\f1 \rtlch\'ba\f0\ltrch\'ac\'bem\f1\rtlch\'a1\f0\ltrch \'b4\'b3\f1\rtlch\'c5\'bb\'c2\'c2\rquote\'a3\'bc\' cb\'cc\'bb\'c2\'c1\'9f\'cd\'d7\'8d\f0\ltrch\lquote om\f1\rtlch\'c0\'d5\'c7\'d9\'88\'b4\'cf\'e4\f0\ltr ch\'a9zx\f1\rtlch\'cb\f0\ltrch\'e0\f1\rtlch\'d2\'e 4\ldblquote\'c8\f0\ltrch\'ee\f1\rtlch\'e6\'dc\f0\l trch\'b5\'a9\'87\'85\f1\rtlch\'d8\'ed\'df\'f1\~\'d d\f0\ltrch\'e8\'b4\'e0\'f7\u1618?\u1614?\'eb\u1612 ?\f1\rtlch\'aa\'98\f0\ltrch\endash\'e9\f1\rtlch\'f e\'f0\f0\ltrch\'03\'b1\'10\~\u8205?
\par }
یادمون نره Cpu های امروزی Core I7 هستند و رم هامون 4 گیگ به بالا سرعت پردازش بر اساس میلیارد بر ثانیه هستند دیگه دوران بدبختی با سیستم های اهل تیر کمون سنگی تموم شد . بازم هم خوشحالم که انتقاد کردین ممنون از شما دوست عزیز
miladatashin
جمعه 25 مرداد 1392, 18:16 عصر
امیدوارم نارحت نشده باشن من خیلی از پست های شما رو دیدم و میدونم برنامه نویس خوبی هستید. لازم به تست نیست معلومه به هزارم ثانیه نمیرسه. ولی شما فرض کنید قراره صد هزار فایل بزرگ جستجو بشه بازم مهم نیست؟ در مورد بحث cpu های امروزی هم به نظر من اشتباه میکنید.با قوی تر شدن پردازنده ها برنامه ها هم سنگین تر میشن و همیشه بهینه کد زدن باید رعایت بشه. من و خیلی ها وقتی رم کامپیوترمون 32 مگ بود(خیلی پیش ها) فکر میکردم با این همه حافظه هیچ وقت برنامه هامون حافظه کم نمیاره !!!
m.4.r.m
جمعه 25 مرداد 1392, 18:51 عصر
برادر من همون زمونی رو شما گفتین ما هم توش بودیم مشکلی نیست من این کد رو نوشتم براشون دادم حالا اگه می بینید مشکل داره شما بهینش کنید بفرستین برای دوستمون لنگ نمونه مرسی از شما
mmssoft
شنبه 26 مرداد 1392, 07:10 صبح
جدا از مسئله بهینه بودن، میشه با یه تغییر کوچیک، کد آقای m.4.r.m رو به شکل زیر تغییر داد که استفاده ازش راحت تره. تنها مشکلی که این کد داره اینه که حرکت رو جز حروف فارسی محاسبه نمیکنه ؛ یعنی اگر توی متن " ُ " و ... باشه، مقدار False رو بر میگردونه :
Function isFarsi(Value As String) As Boolean
Dim Index As Long
Dim Final As String
For Index = 1 To Len(Value)
If Mid(Value, Index, 1) Like "[آ-ی]" Then
Final = Final & Mid(Value, Index, 1)
End If
Next
If Trim(Final) = "" Then isFarsi = False Else isFarsi = True
End Function
Private Sub Command1_Click()
If isFarsi(Text1.Text) = True Then Msgbox "Don't use farsi words!"
End Sub
as987498749874
یک شنبه 27 مرداد 1392, 22:57 عصر
یه الگوریتم درست کردم ! معرکههههههههههههه
تکست رو قفل کن و توی keyascii بنویس
Convert keyascii,Text1,Farsi
تشکر رو فراموش نکنی
فقط من از FlatEdit استفاده میکنم توی ماژول تکستش کن
اگه بجای فارسی Other بزنی میتونی توی قسمت بعد هر کانورت چند حرف خاص یا ... وارد کنی
mehran901
یک شنبه 27 مرداد 1392, 23:45 عصر
یه الگوریتم درست کردم ! معرکههههههههههههه
الگوریتمو انگار خیلی خوب درست نکردین ، فانکشن To_Hejri رو یادتون رفته بود بنویسین!! :لبخند: و البته آرگمان سوم تو بخش enum ها اصلا farsi ای وجود نداره بلکه باید با عبارت _ بیارین Farsi_
ولی درکل لایک داشت
vbhamed
دوشنبه 28 مرداد 1392, 09:24 صبح
سلام
اينم تست وجود حروف فارسي به همراه اعراب و ...
Public Sub Check(ByVal txt As String)
Dim f$, i%
f = "اآبپتثجچحخدرزژسشصضطظعغفقک گلمنوهيئؤىًٌٍةةَُِّْـءأإي"
For i = 1 To Len(txt)
If InStr(f, Mid$(txt, i, 1)) Then Exit For
Next
If i <= Len(txt) Then MsgBox "Error"
End Sub
vbhamed
دوشنبه 28 مرداد 1392, 09:24 صبح
سلام
اينم تست وجود حروف فارسي به همراه اعراب و ...، هر حرفي هم خواستيد ميتونيد اضافه كنيد
البته چون ممكنه بعضي حروف اينجا درست نشون داده نشن فايل ضميمه رو دانلود كنيد
Public Sub Check(ByVal txt As String)
Dim f$, i%
f = "اآبپتثجچحخدرزژسشصضطظعغفقک گلمنوهيئؤىًٌٍةةَُِّْـءأإي"
For i = 1 To Len(txt)
If InStr(f, Mid$(txt, i, 1)) Then Exit For
Next
If i <= Len(txt) Then MsgBox "Error"
End Sub
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.