برای نمایش اعداد به شکل فارسی می بایست شماره اسکی عدد انگلیسی را با 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
به نظر روش دومی کمی بهتر است .