ورود

View Full Version : جدا سازی کلمات فارسی و انگلیسی



iamnewbie
یک شنبه 08 فروردین 1389, 20:04 عصر
سلام دوستان
من می خوام برنامه ای بنویسم که در یک جمله کلمات فارسی را از انگلیسی جدا کند و آنها را چاپ کند

اگر جمله زیر رو فرض بگیریم :

"سلام به همه دوستان barname نویس این site خوب"

من می خوام به صورت زیر چاپ بشه :

سلام به همه دوستان
barname
نویس این
site
خوب

لطفا کمکم کنید با مثال اگر امکان داره

Hossein Bazyan
یک شنبه 08 فروردین 1389, 21:54 عصر
سلام دوستان
من می خوام برنامه ای بنویسم که در یک جمله کلمات فارسی را از انگلیسی جدا کند و آنها را چاپ کند

اگر جمله زیر رو فرض بگیریم :

"سلام به همه دوستان barname نویس این site خوب"

من می خوام به صورت زیر چاپ بشه :

سلام به همه دوستان
barname
نویس این
site
خوب

لطفا کمکم کنید با مثال اگر امکان داره
سلام
از کدهای ascii استفاده کن
اگر بین 46 تا 127 بود انگلیسی در غیر اینصورت فارسی میباشد.

ali682344
یک شنبه 08 فروردین 1389, 23:30 عصر
با سلام
براي اينكار چيزي كه به نظر من مي رسه
اينه كه بايد كلمات جداگانه تست بشن يعني از شروع يك كلمه، تا وقعي كه به space ميرسه
با همون فرمولي كه دوستمون گفت ميشه انجام داد.

البته راهاي ديگه اي هم هست

iamnewbie
یک شنبه 08 فروردین 1389, 23:33 عصر
مرسی دوست عزیز اما اینو می دونستم!مشکل من الگوریتمی هست.مشکل اینه که نمی دونم چطور وقتی مثلا یه تیکه انگلیسی خوندم و چاپ کردم چطور بقیه رشته رو از اون بعد بخونم و همینطور فارسی و انگلیسی رو پیدا و چاپ کنم

iamnewbie
یک شنبه 08 فروردین 1389, 23:35 عصر
با سلام
براي اينكار چيزي كه به نظر من مي رسه
اينه كه بايد كلمات جداگانه تست بشن يعني از شروع يك كلمه، تا وقعي كه به space ميرسه
با همون فرمولي كه دوستمون گفت ميشه انجام داد.

البته راهاي ديگه اي هم هست
این روش هم متاسفانه برای مشکل من کاربرد نداره
من می خوام همه کلمات از یک نوع زبان پشت سرهم باشند

ali682344
دوشنبه 09 فروردین 1389, 00:03 صبح
من اين كدو نوشتم

شايد به دردت بخوره
Dim s As String
s = Text1.Text
For i = 1 To Len(s)
L = Mid(Text1, i, i + 1)
If Asc(L) > 46 And Asc(L) < 127 Then
Text2.Text = Text2 + Chr(Asc(L))
End If
Next i

iamnewbie
دوشنبه 09 فروردین 1389, 00:39 صبح
دوست عزیزم از اینکه سعی در کمک کردن داری جدا تشکر میکنم:)
اما خب متاسفانه اینطوری جل نمی شه.

Babak.Hassanpour
دوشنبه 09 فروردین 1389, 11:35 صبح
با استفاده از تابع split با تعیین space بعنوان delimiter ؛ هر کلمه؛ در یک خانه از آرایه ذخیره میشه.
اینجاست که دیگه میتونید فقط کاراکتر اول هر خونه از آرایه رو بخونید و با جدول کد اسکی مقایسه کنید.
اینم کدش:


Private Sub Command1_Click()
Dim TextArray() As String
TextArray() = Split(Text1, " ")
For i = 0 To UBound(TextArray)
If Asc(UCase(Left(TextArray(i), 1))) >= 65 And Asc(UCase(Left(TextArray(i), 1))) <= 90 Then
MsgBox TextArray(i) & " is English"
Else
MsgBox TextArray(i) & " is Persian"
End If
Next
End Sub




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