PDA

View Full Version : اعداد فارسی در c#



liliom-yas
یک شنبه 02 دی 1386, 14:22 عصر
با سلام
من یک Lable توی برنامم دارم که با حرف و عدد پر میشه(از توی کد برنامه پر میشه)و میخوام اعداد رو داخلش فارسی نشون بده,Unicode اعداد فارسی رو از توی Word پیدا کردم,ولی نمیدونم با چه تابعی این Unicode رو به عدد مورد نظر تبدیل کنم تا اون عدد رو با عدد English داخل String مربوط به لیبل repalace کنم؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
کسی میدونه؟
لطفا کمک کنید:عصبانی++:

ir_programmer
یک شنبه 02 دی 1386, 14:25 عصر
می تونی از یسری از فونت ها هم استفاده کنی که اعداد انگلیسیشون هم فارسی شده.

hassan razavi
یک شنبه 02 دی 1386, 14:26 عصر
فونتهایی که با B شروع شدند مثل B Nazanin یا B Zar و ... اینکار رو میکنند

mkhsoft
یک شنبه 02 دی 1386, 14:34 عصر
فونت تورنادو تاهوما هم این کار رو انجام می ده برات تو همین سایت اگه بگردی می تونی پیداش کنی

ir_programmer
یک شنبه 02 دی 1386, 14:53 عصر
فقط یادت نره استفاده از فونت های B Zar , B Nazanin ,... در کریستال جالب نیست. چون تو export به pdf قاط میزنه.

Chabok
یک شنبه 02 دی 1386, 17:03 عصر
با سلام
باز هم میگم با این که خیلی طولانی نوشته شده ولی خیلی خوب جواب میده :لبخندساده:

این تابع یک مقدار String رو میگیره و هر جا که عدد پیدا کنه به جاش معادل یونیکد فارسی اون عدد رو قرار میده .

تابع فارسی کردن اعداد در VB.Net
http://barnamenevis.org/forum/showpost.php?p=412552&postcount=14

تبدیل شده کد به #C
توسط این سایت (http://labs.developerfusion.co.uk/convert/vb-to-csharp.aspx)



public string FarsiInt(object EnInt)
{
string A = EnInt.ToString;
string[] A2 = new string[A.Length + 1];
int i;
for (i = 0; i <= A.Length - 1; i++) {
if (Information.IsNumeric(A.Substring(i, 1))) {
A2(i) = Strings.ChrW(Strings.AscW(A.Substring(i, 1)) + 1728);
}
else {
A2(i) = A.Substring(i, 1);
}
}
A = "";
for (i = 0; i <= A2.Length - 1; i++) {
A += A2(i);
}
return A;
}

hdv212
یک شنبه 02 دی 1386, 20:30 عصر
Chabok جان، این کدت توی سی شارپ کار نمیکته و error میده، یه بار خودت تست کن.

Chabok
یک شنبه 02 دی 1386, 20:55 عصر
با سلام
من با همون سایتی که عرض کردم تبدیل کردم .

ظاهرا کد مشکلی نداره
ولی فکر کنم چون توی VB.net تبدیل Type ها خودش انجام میشه اینجا به مشکل برخوردیم .
چون در VB.net مثلا integer به String و یا بر عکس نیازی به Convert نداره شاید این مشکل پیش اومده .

فکر کنم شما خودتون باید زحمت این Convert ها را بکشید .

ولی اصل کاری که باید بکنید اینه :
دونه دونه کارکترهای رشته رو بخونید و هر کدوم که عددی بود به کد یونیکد آن 1728 واحد اضافه کنید .

کاری که من کردم اینه :(اضافه کاری زیادی به این میگن)

یک آرایه تعریف کرده ام به نام A2
(طول این آرایه رو با طول رشته یکی میگیرم)

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

حالا بعد از این که تموم شد خانه های این آرایه را در کنار هم قرار میدم و رشته نهایی را Return میکنم

کار اضافی این است که میتونستم همون جا که میبینم عدد است یا نه داخل رشته جایگزین کنیم.

Syntax Highlighting :D

موفق باشید . خدانگهدار

hdv212
یک شنبه 02 دی 1386, 21:53 عصر
من کد شما رو در سی شارپ به صورت زیر اصلاح کردم :

using Microsoft.VisualBasic;

public string FarsiInt(object EnInt)
{
string A = EnInt.ToString();
string[] A2 = new string[A.Length + 1];
int i;
for (i = 0; i <= A.Length - 1; i++)
{
if (Information.IsNumeric(A.Substring(i, 1)))
{
A2[i] = Strings.ChrW(Strings.AscW(A.Substring(i, 1)) + 1728).ToString();
}
else
{
A2[i] = A.Substring(i, 1);
}
}
A = "";
for (i = 0; i <= A2.Length - 1; i++)
{
A += A2[i];
}
return A;
}

Prosoft
جمعه 13 خرداد 1390, 15:19 عصر
کد شما بازهم مشکل داره!
این کد ساده شده و خلاصه شده و تست شده هست! :)

string FarsiInt(int n)
{
string res = "";
while (n > 0)
{
res = (char)((n % 10) + 48 + 1728) + res;
n /= 10;
}
return res;
}

haghft
جمعه 13 خرداد 1390, 15:37 عصر
چرا دیگه 2 بار جمع کردین:متعجب: خب یه دفعه به جای 1728 + 48 مینوشتین 1776

Farshid007
جمعه 13 خرداد 1390, 15:41 عصر
چه خبره بابا :متعجب::متعجب::متعجب::متعجب:: تعجب::متعجب::متعجب::متعجب::م عجب::متعجب::متعجب::متعجب::مت جب::متعجب::متعجب::متعجب::متع ب::متعجب::متعجب::متعجب::متعج ::متعجب:
فونت tahoma بزار , RightToLeft لیبل رو true بزارِی اعداد فارسی میشن

S.Reza
جمعه 13 خرداد 1390, 17:08 عصر
زیر خاکی کشف کردید :قهقهه:

اخرین پستی که در این تاپیک زده شده بود مربوطه میشه به (( یک شنبه 02 دی 1386 21:23 عصر ))

Farshid007
جمعه 13 خرداد 1390, 17:16 عصر
به والله من که تو صفحه اول تالار پیدا کردمش
:متعجب::قهقهه:

davar111
چهارشنبه 27 اردیبهشت 1391, 14:46 عصر
Prosoft (http://barnamenevis.org/member.php?12534-Prosoft) عزیز کد شما فرمت رشته رو عوض میکنه. برای مثال 1391/02/03 03 و 02 رو میکنه 3 و 2 و رشته قاطی میشه . من یه کد اینجوری نوشتم و احتمالا درست کار میکنه !

string FarsiInt(string s)
{
string res = "";
foreach (var ch in s)
res += (char)((int)ch + 1728);

return res;
}

davar111
چهارشنبه 27 اردیبهشت 1391, 14:50 عصر
چه خبره بابا :متعجب::متعجب::متعجب::متعجب:: تعجب::متعجب::متعجب::متعجب::م عجب::متعجب::متعجب::متعجب::مت جب::متعجب::متعجب::متعجب::متع ب::متعجب::متعجب::متعجب::متعج ::متعجب:
فونت tahoma بزار , RightToLeft لیبل رو true بزارِی اعداد فارسی میشن

عزیز بابا به این سادگیا نیست ! همه جا جواب نمیده! به همچین متدی نیاز بود... :)