PDA

View Full Version : مشکل در تبدیل یه رشته شامل اعداد فارسی به عدد



hamidtb
جمعه 13 دی 1387, 08:54 صبح
سلام
من وقتی میخوا با دستور Convert یه رشته که داخلش اعداد فارسی هست رو به عدد تبدیل کنم برنامه خطای زیر رو میده

Input string was not in a correct format.اینم کد

LongDate = Convert.ToInt32(DateStr)که DateStr شامل اعداد ٠١٢٣٤٥٦٧٨٩هست

h.jaza
جمعه 13 دی 1387, 13:29 عصر
دوست عزیز این کد ایرادی نداره، احتمالا مشکل از جای دیگه ای هست.

احتمالا همراه با این رشته ی ورودی غیر از عدد مقادیر غیر عددی دیگه ای هم می فرستادی که بهت ایرور میده.

hamidtb
جمعه 13 دی 1387, 14:01 عصر
سلام
نه فکر نکنم
این رشته مثلا به صورت ١٣٨٧/٠٢/٠٣ هست که من با string.replace("/","") اسلش توی اونو حذف میکنم
فکر نکنم چیز دیگه ای توی رشته باشه

h.jaza
جمعه 13 دی 1387, 15:39 عصر
این کد مشکلی نداره:



string text = textBox1.Text.Replace("/", "");
int num = Convert.ToInt32(text);

احتمالا مشکل از جای دیگه ای هستش.

hamidtb
سه شنبه 17 دی 1387, 08:40 صبح
سلام
من دوباره توی برنامه ام به همین مشکل برخوردم
من کد

Convert.ToInt32(DGVGhestha.Rows[i].Cells[2].Value.ToString().Replace(@"/",""))رو توی یه فرم نوشتم بدون هیچ مشکلی کار میکنه اما درست مثل همین کد رو توی یه فرم دیگه نوشتم خطا میده که :

Input string was not in a correct format.که این خونه شامل مقدار ١٣٨٨/٠١/٠١ هست
:عصبانی++::عصبانی++::عصبانی++:

amirferdowsi
سه شنبه 17 دی 1387, 09:01 صبح
سلام
دوست عزیز ببین این کد مشکلت رو حل میکنه :



Int32 int_Text = Int32.parse(string);k

hamidtb
سه شنبه 17 دی 1387, 09:26 صبح
سلام
دوست عزیز ببین این کد مشکلت رو حل میکنه :



Int32 int_Text = Int32.parse(string);k

دوست عزیز ممنون
ولی بازم ....:عصبانی++::عصبانی++:

hamidtb
سه شنبه 17 دی 1387, 09:28 صبح
راستی
دستوری نیست که من بتونم کد اسکی یه کاراکتر رو ببینم

h.jaza
سه شنبه 17 دی 1387, 10:10 صبح
سلام
دوست عزیز ببین این کد مشکلت رو حل میکنه :



Int32 int_Text = Int32.parse(string);k

اولا این کد زمانی درسته که رشته ی شما کاملا متشکل از اعداد باشه نه عدد و کاراکتر.

ثانیا استفاده از parse خیلی پیشنهاد نمیشه چرا که هم از فرایند تبدیل جالبی بهره نمی بره و هم اینکه در صورت بروز مشکل برنامه Exception میده. (منظورم این نیست که درست کار نمیکنه، اشتباه نگیر)

وسه ی همین یا از TryParse و یا از متدهای Abstract کلاس Convert باید استفاده بشه که اونها هم تنها برای زمانیست که تمام رشته شامل اعداد باشه.

ولی در این حالت دو کار بیشتر نمیشه انجام داد:
1- استفاده از همان متد Replace و ...
2- Trim کردن
البته Spilt هم می تونه بکار بیاد ولی کار و می پیچونه

بعد از این می بایست رشته ی حاصل که کامل متشکل از اعداد است توسط یکی از همون متد های بالا به عدد تبدیل کرد و تمام.

دستوری نیست که من بتونم کد اسکی یه کاراکتر رو ببینم
در رویداد هایی مثل KeyPress، KeyUp ،KeyDown و ...، شما می تونی با استفاده از خصوصیات e به کد اسکی کاراکتر مورد نظر دسترسی داشته به سادگی باهاش کار کنی مثل e.KeyChar و خیلی های دیگه.

البته برای در آوردن کد اسکی روش های زیادی وجود داره که این یکیشونه.

h.jaza
سه شنبه 17 دی 1387, 10:20 صبح
یه نکته ی دیگه که الان یادم اومد اینکه اولا به @ نیازی نیست که شما گذاشتی و ثانیا کدت رو از



Convert.ToInt32(DGVGhestha.Rows[i].Cells[2].Value.ToString().Replace(@"/",""));


به



string text = textBox1.Text.Replace("/", "");
int num = Convert.ToInt32(text);


تغییر بده، یعنی جداشون کن، شاید درست بشه.

hamidtb
سه شنبه 17 دی 1387, 10:37 صبح
سلام
نه بازم همون خطا رو میده

kamiloted
یک شنبه 23 خرداد 1395, 15:50 عصر
سلام دوستان اگر کسی با این مشکل برخورد آخر ریپلیس کد Trim() بزارید.