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


من روی متنی با طول 21480کاراکتر که دارای 681 عدد انگلیسی بود دو روش زیر را تست و میزان Ticks را قبل و بعد از اجرای هر دو روش یادداشت کردم .


روش اول :

Dim sb As New System.Text.StringBuilder

For i As Integer = 0 To s.Length - 1

If Asc(s.Chars(i)) >= 48 And Asc(s.Chars(i)) <= 57 Then

sb.Append(ChrW(Asc(s.Chars(i)) + 1728))

Else

sb.Append(s.Chars(i))

End If

Next

در این روش تمامی کاراکترهای متن اصلی که در S ذخیره شده است بررسی می شود ، اگر عدد بود با 1728 جمع شده و در stringBuilder اضافه می شود اگر عدد نبود بدون تغییر به stringBuilder اضافه می شود .


اعداد tick برای 3 بار اجرا شدن این کد به شکل زیر است :


633675790364880000
633675790364960000

 

633675790406880000
633675790407570000

 

633675790456870000
633675790456920000


روش دوم استفاده از Replace بود .

Dim s As String = TextBox1.Text

For i As Integer = 48 To 57

s = s.Replace(Chr(i), ChrW(i + 1728))

Next

اعداد Tick در این روش عبارتند از :


633675790842630000
633675790842670000

 

633675790872860000
633675790872900000

 

633675790889120000
633675790889170000


به نظر روش دومی کمی بهتر است .

GravatarµiladWwW
پنج شنبه ساعت 10:33 , 26/10/1387
کاش بریم تو سورس دات نت ببینیم Replace چیکار می کنه که حلقه For نمیکنه! یا برعکس!
Gravatarمحمود مروج
شنبه ساعت 22:12 , 28/10/1387
اما من در دات نت 1 و 1.1 با روش اول با سرعت حداقل 20 برابر بهتر جواب گرفتم . البته حجم متن هم حدود300 کیلو بایت بود.
Gravatarحامد بنايی
يکشنبه ساعت 08:24 , 29/10/1387
تا جايی که من می دونم وقتی از s=s استفاده می شه که هر دو string است هر بار از آبجکت string يکی جديد ساخته می شه و خيلی جاها نوشته اين کار رو نکنيد، به جايش stringBuilder اينطوری نيست و برای متن ها طولانی توصيه می شه. دليل بهتر بودن دومی در اينجا شايد طول متن باشد. بايد ساختار replace رو هم ديد. http://www.idevcenter.com/link/202/?ch=144
Gravatarحامد بنايی
يکشنبه ساعت 17:16 , 29/10/1387
سهيل idevcenter يک تستی کرد که فکر کنم نتيجه اش رو امشب بنويسه در idevcenter ، طبق اون تست از همه سريعتر جابجايی کاراکترها با آرايه ای از نوع char است .
Gravatarحامد بنايی
دوشنبه ساعت 10:11 , 30/10/1387
http://www.idevcenter.com/blog/post/148/
Gravatarمحمود مروج
سه شنبه ساعت 00:12 , 1/11/1387
من در کنه ماجرا نرفته بودم دیگه!!...چون اون سرعت در حجم کاری من برای من پاسخگو بود...مقاله سهیل رو هم نگاه می کنم الان... اووو...چقدر وقت بود وبلاگش رو ندیده بودم :-)
GravatarJWwW
پنج شنبه ساعت 16:50 , 3/11/1387
با regex نمیشه نوشت؟
Gravatarعلی
چهارشنبه ساعت 22:52 , 22/7/1388
نهایت شما می توانید ده خط replace بنویسید و مستقیم بنویسید که در رشته متن 1 رو به ۱تبدیل کنه و همینطور تا ۹... شما بهتره یه تابع بنویسید و استرینگ رو بگیره و این ده تا عدد رو عوض کنه. کار تمومه دیگه.
Gravatarرضا
جمعه ساعت 23:58 , 29/8/1388
روش جالبی بود در غیر این صورت به جای عدد 1728 عدد 864 را امتحان میکردید
Gravatarمینا کریمی
پنج شنبه ساعت 18:55 , 23/10/1389
سلام خواهش میکنم فقط طریقه تبدیل اعداد انگلیسی به فارسی در برنامه اکسل 2007 لطفا" ایمیل نمایید دستور تبدیل کردن . باتشکر از شما .
نام :   
ايميل :      اين سايت از سيستم گراواتر استفاده می کند ، اگر در گراواتر دارای کد کاربری هستيد می توانيد از آن آدرس ايميل استفاده کنيد.  
وب سايت :   
ديدگاه :   
عدد زير را وارد کنيد :
  


  پيام شما بعد از بازبينی افزوده خواهد شد.