PDA

View Full Version : سوال: جدا کردن اعداد از String



rabi213
شنبه 29 اسفند 1388, 15:19 عصر
سلام
توی پروژه م باید اس ام اس بخونم از جی اس ام..اما باید از این اس ام عدد و حروف رو از هم جدا کنم...ممکنه عدد اعشاری هم باشه...
چطوری از هم تشخیص بدم و جدا کنم و توی یه TextBox سیو کنم؟

و یه سوال دیگه....میتونم با کلیک روی یه ردیف از ListView اون ردیف رو تو یه TextBox پرینت کنم؟

FastCode
شنبه 29 اسفند 1388, 15:24 عصر
Regular Expressions

rabi213
شنبه 29 اسفند 1388, 17:11 عصر
میشه بیشتر توضیح بدین؟:افسرده:

Peyman.Gh
شنبه 29 اسفند 1388, 17:39 عصر
System.Text.RegularExpressions

exlord
شنبه 29 اسفند 1388, 19:02 عصر
List<string> strL = new List<string>();
List<double> dblL = new List<double>();
string a = "aksd 3453 fger 345634.334 dfgdf";
string [] s = a.Split(new char[] { ' ' });
foreach (string item in s)
{
try
{
double x = Convert.ToDouble(item);
dblL.Add(x);
}
catch (FormatException)
{
if( ! String.IsNullOrEmpty(item))
strL.Add(item);
}
}

FastCode
یک شنبه 01 فروردین 1389, 01:13 صبح
List<string> strL = new List<string>();
List<double> dblL = new List<double>();
string a = "aksd 3453 fger 345634.334 dfgdf";
string [] s = a.Split(new char[] { ' ' });
foreach (string item in s)
{
try
{
double x = Convert.ToDouble(item);
dblL.Add(x);
}
catch (FormatException)
{
if( ! String.IsNullOrEmpty(item))
strL.Add(item);
}
}


من این مشکل رو داشتم ولی مسئله ی من رو خودم طراحی نکوده بودم.
مثال :زیتون2.5کیلویی
نظرتون راجع به space چیه؟

exlord
یک شنبه 01 فروردین 1389, 09:51 صبح
List<string> strL = new List<string>();
List<double> dblL = new List<double>();

List<char> strCh = new List<char>();
List<char> intCh = new List<char>();

string a = "aksd3453fger345634.334dfgdf";

foreach (char item in a)
{
int x = Convert.ToInt16(item);//gereftane code ASCII
if ((x >= 48 && x <= 57) || (x == 46)) // 48~57 --> 0~9 ... 46 --> .
{
if (strCh.Count > 0)
{
strL.Add(new string(strCh.ToArray()));
strCh.Clear();
}
intCh.Add(item);
}
else
{
if (intCh.Count > 0)
{
dblL.Add(Convert.ToDouble(new string(intCh.ToArray())));
intCh.Clear();
}
strCh.Add(item);
}
}
//in gesmat baraye tekkeye akhare string hastesh ke tuye halge anjam nemishe
if (intCh.Count > 0)
{
dblL.Add(Convert.ToDouble(new string(intCh.ToArray())));
}
else if (strCh.Count > 0)
{
strL.Add(new string(strCh.ToArray()));
}

debugger
یک شنبه 01 فروردین 1389, 11:42 صبح
ببین این تابعی که نوشتم به دردت میخوره




privatestring ExtractNumbers(string Expression)
{
string result = null;
char Letter;
for (int i = 0; i < Expression.Length; i++)
{
Letter = Convert.ToChar(Expression.Substring(i, 1));
if (Char.IsNumber(Letter))
{
result += Letter.ToString();
}
}
// MessageBox.Show(result);
return result;
}

rabi213
چهارشنبه 04 فروردین 1389, 19:51 عصر
List<string> strL = new List<string>();
List<double> dblL = new List<double>();

List<char> strCh = new List<char>();
List<char> intCh = new List<char>();

string a = "aksd3453fger345634.334dfgdf";

foreach (char item in a)
{
int x = Convert.ToInt16(item);//gereftane code ASCII
if ((x >= 48 && x <= 57) || (x == 46)) // 48~57 --> 0~9 ... 46 --> .
{
if (strCh.Count > 0)
{
strL.Add(new string(strCh.ToArray()));
strCh.Clear();
}
intCh.Add(item);
}
else
{
if (intCh.Count > 0)
{
dblL.Add(Convert.ToDouble(new string(intCh.ToArray())));
intCh.Clear();
}
strCh.Add(item);
}
}
//in gesmat baraye tekkeye akhare string hastesh ke tuye halge anjam nemishe
if (intCh.Count > 0)
{
dblL.Add(Convert.ToDouble(new string(intCh.ToArray())));
}
else if (strCh.Count > 0)
{
strL.Add(new string(strCh.ToArray()));
}

گرفتن کد ascii برای چی؟
. اون اعداد 48 و 57 و 46 نشون دهنده ی چی هستن؟

--
یه سوال دیگه هم پرسیدم..چه جوری میتونم با کلیک روی یکی از ردیفهای listView اون رىيف رو تو يه textBox انتقال بدم؟

Parham.D
پنج شنبه 05 فروردین 1389, 08:18 صبح
http://www.regular-expressions.info/

exlord
پنج شنبه 05 فروردین 1389, 11:09 صبح
[quote=rabi213;937619]گرفتن کد ascii برای چی؟
. اون اعداد 48 و 57 و 46 نشون دهنده ی چی هستن؟

string رو حرف به حرف میخونم و با توجه به کد ascii از هم جدا می کنم ... حالا این یه روشه ..... راه های دیگه ای هم هست مثلا میتونی به جای
(x >= 48 && x <= 57) بنویسی char.IsNumber(item)
توی comment که نوشتم............ 48 تا 57 کد ascii اعداد 0 تا 9 هستش و 46 هم ماله --> . <-- (ممیز)هستش

Parham.D
جمعه 06 فروردین 1389, 12:17 عصر
دوستان، چطور میشه کاراکتری مثل Enter را تشخیص داد؟ مثلا در یک TextBox میخواهیم بفهمیم کجا Enter زده شده برای رفتن به خط بعد.

ممنون

exlord
جمعه 06 فروردین 1389, 12:35 عصر
دوستان، چطور میشه کاراکتری مثل Enter را تشخیص داد؟ مثلا در یک TextBox میخواهیم بفهمیم کجا Enter زده شده برای رفتن به خط بعد.

ممنون


string x;
foreach (char ch in x)
{
if(ch == '\n')
MessageBox.Show("New Line");
}

saed2006
یک شنبه 08 فروردین 1389, 12:16 عصر
سلام
string str="مرحله 1"
تا n
میخوام به بهینه ترین حالت ممکن عدد رو از متن جدا کنم

mohammad diba
یک شنبه 08 فروردین 1389, 12:45 عصر
من یه پیشنهاد دارم
1-رشته رو بریز تویه یهمتغیر Temp
2-کاراکتر ها رو یکی یکی بخون واز کد اسکی اون تشخیص بده اگهعدد نیست با spaceکاراکتر جاگذاری کن
3-با استفاده از تابه بازگشتی کلیه space ها را فقط با یه space جاگذاری کن
4-با استفاده از متد split ارایه ای از رشته ها رابه دست می آری که همش عدده.

mohammad diba
یک شنبه 08 فروردین 1389, 12:47 عصر
من یه پیشنهاد دارم
1-رشته رو بریز تویه یه متغیر Temp
2-کاراکتر ها رو یکی یکی بخون واز کد اسکی اون تشخیص بده اگه عدد نیست با کاراکتر space جاگذاری کن
3-با استفاده از تابع بازگشتی کلیه space ها را فقط با یه space جاگذاری کن
4-با استفاده از متد split ارایه ای از رشته ها رابه دست می آری که همش عدده.

behzad1986
یک شنبه 08 فروردین 1389, 13:00 عصر
سلام دوست عزيز

foreach (char c in Str)
{
if (Char.IsDigit(c))
Str1 += c.ToString();
}

saed2006
یک شنبه 08 فروردین 1389, 13:04 عصر
string pp = tabControl1.Tabs[i].Text.Substring(5, tabControl1.Tabs[i].Text.Length-5);

sds1920
یک شنبه 08 فروردین 1389, 13:04 عصر
روشی که mohammad diba گفت روش خوبیه ولی به نظر من به جای اینکه space بگذاری و بعد حذفش کنی بهتره که توی همون پیمایش اول هر زمان که به اولین کاراکتر عدد برخورد کردی اون را تا رسیدن به کاراکتر غیر عددی بعدی جدا کنی و بلافاصله به عدد تبدیلش کنی.اینطوری هزینه پیمایش دوباره کل رشته برای حذف space رو نداری و از تابع Splite هم استفاده نمی کنی.
پس می شه گفت بهینه تره و نه خیلی.

rabi213
یک شنبه 08 فروردین 1389, 20:57 عصر
[quote=rabi213;937619]گرفتن کد ascii برای چی؟
. اون اعداد 48 و 57 و 46 نشون دهنده ی چی هستن؟

string رو حرف به حرف میخونم و با توجه به کد ascii از هم جدا می کنم ... حالا این یه روشه ..... راه های دیگه ای هم هست مثلا میتونی به جای
(x >= 48 && x <= 57) بنویسی char.IsNumber(item)
توی comment که نوشتم............ 48 تا 57 کد ascii اعداد 0 تا 9 هستش و 46 هم ماله --> . <-- (ممیز)هستش

یه سوال دیگه
من بخوام این string رو از یه textBox بگیرم..باید جای a..بذارم textBox1.text?