PDA

View Full Version : حذف کارکترهای متنی از رشته



programerinfonet
چهارشنبه 23 مرداد 1392, 19:35 عصر
سلام دوستان
من یک رشته دارم به شکل زیر
"1h2s36g54l8e9s7"
حالا میخوام فقط اعداد رو داشته باشم یعنی بگم هر حرف دیگه ای که هست حذف بشه فقط اعداد بمونه

مهرداد صفا
چهارشنبه 23 مرداد 1392, 19:48 عصر
با سلام.


result=text.select((ch)=>Char.IsDigit(ch)).ToArray();
یا به زبان دیگر در یک حلقه تکتک کاراکترهای موجود در رشته را بگیرید و با استفاده از متود Char.IsDigit چک کنید که اگر عددی بودند به رشته نتیجه اضافه شوند.

group45
چهارشنبه 23 مرداد 1392, 19:51 عصر
واسه این چند تا راه حل هست
یکیش:

تک تک کاراکترها رو تبدیل به اینت کن البته تو متد try,catch اگه کانورت شد بنویسش اگه نه هم که هیچ!!!!!

programerinfonet
چهارشنبه 23 مرداد 1392, 19:59 عصر
با سلام.


result=text.select((ch)=>Char.IsDigit(ch)).ToArray();
یا به زبان دیگر در یک حلقه تکتک کاراکترهای موجود در رشته را بگیرید و با استفاده از متود Char.IsDigit چک کنید که اگر عددی بودند به رشته نتیجه اضافه شوند.

اگه میشه کد رو یکم توضیح بدید اون ch چی هست ؟
من هر طرفیش کردم جواب نداد

nunegandom
چهارشنبه 23 مرداد 1392, 21:26 عصر
ch اولی تعریف یک متغیر هستش میتونی هر چیز دیگه ای بذاری...

programerinfonet
چهارشنبه 23 مرداد 1392, 22:23 عصر
من نتونستم از این کد استفاده کنم

result=text.select((ch)=>Char.IsDigit(ch)).ToArray ();
یک بیاد کمک
چه طوری میشه از یک رشته ی ترکیب شده از متن و عدد فقط اعدادشو جدا کرد ؟

ma.rad
چهارشنبه 23 مرداد 1392, 22:48 عصر
شما دیگه چرا ! لطفا جستجو کنید.
http://barnamenevis.org/showthread.php?317712-%DA%86%DA%AF%D9%88%D9%86%DA%AF%DB%8C-%D8%AC%D8%AF%D8%A7-%DA%A9%D8%B1%D8%AF%D9%86-%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF-%D9%85%D9%88%D8%AC%D9%88%D8%AF-%D8%AF%D8%B1-%DB%8C%DA%A9-%D8%B1%D8%B4%D8%AA%D9%87-%D8%AF%D8%B1-%D8%AF%D8%A7%D8%AE%D9%84-textBox

http://barnamenevis.org/showthread.php?266781-%D8%AC%D8%AF%D8%A7-%D9%83%D8%B1%D8%AF%D9%86-%D9%82%D8%B3%D9%85%D8%AA%D9%8A-%D8%A7%D8%B2-%D9%8A%D9%83-%D8%B1%D8%B4%D8%AA%D9%87-%D9%8A-%D9%85%D8%AA%D8%BA%D9%8A%D8%B1

مهرداد صفا
پنج شنبه 24 مرداد 1392, 01:07 صبح
من نتونستم از این کد استفاده کنم

result=text.select((ch)=>Char.IsDigit(ch)).ToArray ();
یک بیاد کمک
چه طوری میشه از یک رشته ی ترکیب شده از متن و عدد فقط اعدادشو جدا کرد ؟

با سلام.
می بخشید!!
در واقع باید به جای Select از Where استفاده می شد:

MessageBox.Show(new string ("h1,@34l1J64Kd3n3p=4+221f4".Where(character => char.IsDigit(character)).ToArray()) );

یا:

string result = "";
foreach (char character in "h2lkd35k5k3k2l")
{
if(char.IsDigit(character))
result += character.ToString();
}
MessageBox.Show(result);

چون یک String ماهیتا می تواند یک IEnumerable<Char> باشد (از این interface در ساختار String استفاده شده)، پس می توان همانند هر منبع داده دیگر از این نوع، روی آن متود های LinQ را اجرا کرد.
چیزی که در متود Whereدیده می شود در واقع یک تابع است که یک Char میگیرد و یک bool بر می گرداند:

Where(character=> CharIsDigit(character);

برابر است با:

bool MyFunction(Char character)
{
return Char.IsDigit(character);
}
//...
....Where(MyFunction(character))....

که به آن اصطلاحا lambda گفته می شود.
متود Where هر یک از اعضای مجموعه را به lambda تعریف شده یا مثلا متود MyFunction ارسال می کند و ینتیجه یک مجموعه یا Ienumerable جدید است که اعضای آن، آیتمهایی هستند که حاصل ارسال آنها به lambda تعریف شده یا متود MyFunction فقط true بوده.
برای مثال به کد زیر دقت کنید:

int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

bool IsGreaterThanFive(int number)
{
return number > 5;
}
//....
//....
var result = numbers.Where(IsGreaterThanFive);


در کد بالا اعضای آرایه numbers به تابع IsGreaterThanFive فرستاده می شوند. در تابع IsGreaterThanFive در صورتی که آرگومنت ارسالی بزرگتر از 5 باشد مقدار true برگردانده می شود و عضوی که به تابع فرستاده شده و نتیجه تابع true بوده به مجموعه یا IEnumerable جدید اضافه می شود. در نتیجه متود Where در اینجا IEnumerable<int> بر میگرداند که تمام اعضای آن شامل اعضای بزرگتر از 5 آرایه numbers است.

با توجه به مثال بالا 4 خط زیر در واقع یک معنی دارند:

var result = numbers.Where(IsGreaterThanFive);
result = numbers.Where(number => number > 5);
result = from number in numbers where number > 5 select number;
result = from number in numbers where IsGreaterThanFive(number) select number;


و نتیجه را می توانید به این صورت بررسی کنید:

foreach (int n in result)
MessageBox.Show(n.ToString());

پیشنهاد می کنم لینکها و موضوعات زیر را مورد مطالعه قرار دهید:
Lambda Expressions (C#‎ Programming guide) (http://msdn.microsoft.com/en-us/library/vstudio/bb397687.aspx)
=> Operator (C#‎ Reference) - (http://msdn.microsoft.com/en-us/library/vstudio/bb311046.aspx)
Anonymous Functions (C#‎ Programming Guide) (http://msdn.microsoft.com/en-us/library/bb882516.aspx)
delegate (C#‎ Reference) (http://msdn.microsoft.com/en-us/library/900fyy8e.aspx)
Enumerable.Where(TSource) Method (IEnumerable(TSource), Func(TSource, Boolean)) (System.Linq) (http://msdn.microsoft.com/en-us/library/bb534803.aspx)
Getting Started with LINQ in C#‎ (http://msdn.microsoft.com/en-us/library/bb397933.aspx)
LINQ Query Expressions (C#‎ Programming Guide) (http://msdn.microsoft.com/en-us/library/bb397676.aspx)
Char.IsDigit Method (String, Int32) (System) (http://msdn.microsoft.com/en-us/library/0t641e58.aspx)

hamid_0341
پنج شنبه 24 مرداد 1392, 11:28 صبح
اقا بیا بدرد میخوره :لبخند: چه کردم من !

string h = textBox1.Text.ToString
int p = h.Count();
string o= "";
for (int i = 0; i < p; i++)
{
foreach (char chars in textBox1.Text)
{
if (!char.IsDigit(chars))
{
string y = chars.ToString();
o += y;
}

}
break;
}
textBox1.Text = o;

tooraj_azizi_1035
پنج شنبه 24 مرداد 1392, 12:49 عصر
string.Join(null,Regex.Matches("1h2s36g54l8e9s7",@"\d+").OfType<Match>().Select( m => m.Value).ToArray());

یا:

string.Join(null,System.Text.RegularExpressions.Re gex.Split(expr, "[^\\d]"));

یا


string s = "123iuow45ss";
var getNumbers = (from t in s
where char.IsDigit(t)
select t).ToArray();
Console.WriteLine(new string(getNumbers));

بعد از \d+ فاصله وجود نداره صفحه اینطوری نشون میده.