PDA

View Full Version : سوال: چگونه بفهمیم آیتمی در لیست باکس دارای اسپیس زیادی است ؟



dele_ghamgin_2008
شنبه 23 خرداد 1394, 17:36 عصر
سلام . منظورم از سورس برعکس ، بر اساس حروف الفبا نیست . بر اساس آخرین کلمه موجود در لیست هست . من یک لیست باکس دارم که توش یک سری آیتم وجود داره . بعضی از این آیتم ها آخرشون اسپیس زیادی داره . یعنی زمانی که کلمه تموم میشه بعدش الکی اسپیس خورده . حالا من میخوام که این کلمات رو پیدا کنم .
اگر اول این آیتم ها اسپیس زیادی داشته باشه و سورت معمولی انجام بدم ، دقیق مشخص میشه که کدوم آیتم ها اولشون با اسپیس اضافی شروع میشه . ولی میخوام بدونم کدوم آیتم ها آخرشون اسپیس زیادی داره . راهش چیه ؟ چیکار باید بکنم تا بفهمم کدوم آیتم ها آخرشون اسپیس زیادی خورده ؟
در تصویر زیر با نوشتن دستور سورت ، آیتم هایی که ابتداش اسپیس زیادی داشت رو بالاتر از همه نشون داده .

132212

ali_md110
شنبه 23 خرداد 1394, 18:18 عصر
میتونید از تکه کد زیر استفاده کنید



for (var i = 0; i < listBox1.Items.Count; i++)
{
var cell0 = listBox1.Items[i].ToString();
{
var count = cell0.Where(Char.IsWhiteSpace).Count();
Console.WriteLine(count);
}
}

asman.abi
شنبه 23 خرداد 1394, 19:02 عصر
میتونید از تکه کد زیر استفاده کنید



for (var i = 0; i < listBox1.Items.Count; i++)
{
var cell0 = listBox1.Items[i].ToString();
{
var count = cell0.Where(Char.IsWhiteSpace).Count();
Console.WriteLine(count);
}
}


این کد تعداد space های هر آیتم مربوطه رو می گه!
ایشون می خوان آیتم هایی که space دارن رو پیدا کنن نه تعداد space ها رو.

کد به این صورت میشه و ایندکس های مواردی که space دارن به طور پیش فرض بیش از 3 space دارن نمایش می دهد.
string u, y = "";
for (int i = 0; i < listBox1.Items.Count; i++)
{
u = listBox1.Items[i].ToString();
if (u.Contains(" "))
y += i + "-";
}
MessageBox.Show(y);

dele_ghamgin_2008
شنبه 23 خرداد 1394, 20:50 عصر
این کد تعداد space های هر آیتم مربوطه رو می گه!
ایشون می خوان آیتم هایی که space دارن رو پیدا کنن نه تعداد space ها رو.

کد به این صورت میشه و ایندکس های مواردی که space دارن به طور پیش فرض بیش از 3 space دارن نمایش می دهد.
string u, y = "";
for (int i = 0; i < listBox1.Items.Count; i++)
{
u = listBox1.Items[i].ToString();
if (u.Contains(" "))
y += i + "-";
}
MessageBox.Show(y);

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

asman.abi
شنبه 23 خرداد 1394, 21:40 عصر
اگر آیتم هاش رو می خوای اینم با آیتم هاش.
string u,y = "";
for (int i = 0; i < listBox1.Items.Count; i++)
{
u = listBox1.Items[i].ToString();
if (u.Contains(" "))
y +=u+"\r\n";
}
MessageBox.Show(y);

Mahmoud Zaad
شنبه 23 خرداد 1394, 21:46 عصر
سلام
خیلی ساده
for (int i = 0; i < listBox1.Items.Count; i++)
{
if (listBox1.Items[i].ToString().EndsWith(" "))
{
MessageBox.Show(i.ToString());
}
}

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

asman.abi
شنبه 23 خرداد 1394, 22:00 عصر
سلام
خیلی ساده
for (int i = 0; i < listBox1.Items.Count; i++)
{
if (listBox1.Items[i].ToString().EndsWith(" "))
{
MessageBox.Show(i.ToString());
}
}

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

این بازم ایندس میده . میگه ایندکس نمی خوام.
با این نمونه هم این جور میشه
for (int i = 0; i < listBox1.Items.Count; i++)
{
if (listBox1.Items[i].ToString().EndsWith(" "))

{
MessageBox.Show(listBox1.Items[i].ToString());

}
}

ebrahim.rayatparvar
شنبه 23 خرداد 1394, 22:07 عصر
سلام مهندس
این کار رو برای چی میخوای؟؟؟
چه کارییه که با Space درج میکنی چرا زمان درج تو لیست Space ها رو پاک نمی کنی؟؟

ali_md110
شنبه 23 خرداد 1394, 22:31 عصر
همون مثالی که زدم چک بکنید اگر counter=0 باشه یعنی آخر رشته فضای خالی نیست اگر بیشتر بود یعنی فضای خالی داره و میشه هدف شما
تابع IsWhiteSpace نشون دهنده فضای خالی هست میتونید ازش استفاده کنید




for (var i = 0; i < listBox1.Items.Count; i++)
{
var cell0 = listBox1.Items[i].ToString();
{
var count = cell0.Where(Char.IsWhiteSpace).Count();
if(count>0)
{
Console.WriteLine(count);
}
}
}

pbm_soy
یک شنبه 24 خرداد 1394, 01:20 صبح
اگه هدفتون sort است خوب بهتر بودهمون اول کار ایتمها را قبل از اضافه کردن به لیست باکس فضاهای خالی دوطرف را حذف میکردید و خلاص میشدید!
در نمونه کد زیر آیتمهای لیست اول را بدون فاصله های ول و آخر میریزم در لیست باکس دوم


listBox2.Items.Clear();
for (int i = 0; i < listBox1.Items.Count; i++)
listBox2.Items.Add(listBox1.Items[i].ToString().Trim());


البته میتوانید بجای استفاده از لیست باکس دوم از یک آرایه استفاده کنید و همه را بدون فاصله بریزید در یک آرایه و آن آرایه را مرتب کنید و بعد دوباره مقادیر آرایه را که مرتب شده اند در لیست باکس نمایش دهید


List<string> myItems=new List<string>();

for (int i = 0; i < listBox1.Items.Count; i++)
myItems.Add(listBox1.Items[i].ToString().Trim());

listBox2.Items.Clear();
myItems.Sort();
listBox2.DataSource = myItems;

pbm_soy
یک شنبه 24 خرداد 1394, 01:30 صبح
میخواستم بگم شما برای مرتب کردن نیازی ندارید اصلا بدونید کدام آیتمها فاصله در ابتدا دارند و یا در انتها کلا در مثالها بالا گفتیم تمام فواصل از ابتدا و انتها حذف شوند حالا اگه نیاز داری که فقط فاصله های انتهای آیتم حذف شوند میتوانی از متد TrimEnd() استفاده و از متد TrimStart() برای حذف فواصل از ابتدای آیتمها

در تیکه کد زیر آیتمهایی که با فاصله شروع شده باشند را در یک آرایه به نام myItems میریزد و سپس آن آرایه را در لیست باکس دوم نمایش میدهد


List<string> myItems = new List<string>();

for (int i = 0; i < listBox1.Items.Count; i++)
if (listBox1.Items[i].ToString().StartsWith(" "))
myItems.Add(listBox1.Items[i].ToString());

listBox2.Items.Clear();
listBox2.DataSource = myItems;


بجای متد StartWith میتوانید از EndWith استفاده کنید برای حالاتی که فواصل انتهای آیتمها را بخواهید پیدا کنید

نمیدانم تونستم کمکی کرده باشم یا خیر؟!

Mahmoud Zaad
یک شنبه 24 خرداد 1394, 08:43 صبح
این بازم ایندس میده . میگه ایندکس نمی خوام.
با این نمونه هم این جور میشه
for (int i = 0; i < listBox1.Items.Count; i++)
{
if (listBox1.Items[i].ToString().EndsWith(" "))

{
MessageBox.Show(listBox1.Items[i].ToString());

}
}




ایشون میگه عدد نمیخواد، یعنی تعداد spaceها رو نمیخواد، موقعیت(اندیس) آیتم ها رو که داشته باشه عنوانشون هم راحت پیدا میشه.

dele_ghamgin_2008
یک شنبه 24 خرداد 1394, 12:46 عصر
سلام
خیلی ساده
for (int i = 0; i < listBox1.Items.Count; i++)
{
if (listBox1.Items[i].ToString().EndsWith(" "))
{
MessageBox.Show(i.ToString());
}
}

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

مرسی گلم . دنبال همین دستور بودم . تو یکی از افرادی بودی که همیشه کمکم کردی . از بقیه بچه هاهم ممنونم . ولی این دستور از همه ساده تر و روون تر بوده و همینو بیشتر به کارم میاد. مرسی از همه عزیزان گلم.
listBox1.Items[i].ToString().EndsWith(" ")

asman.abi
یک شنبه 24 خرداد 1394, 12:51 عصر
ایشون میگه عدد نمیخواد، یعنی تعداد spaceها رو نمیخواد، موقعیت(اندیس) آیتم ها رو که داشته باشه عنوانشون هم راحت پیدا میشه.

خب کد بالا ابتدا با ایندکس بود. بعد با دو روش با خود آیتم ها گفتم. یعنی نه ایندکسی نه تعداد space ها. بلکه خود item ها.
دقت کنید.

dele_ghamgin_2008
یک شنبه 24 خرداد 1394, 12:56 عصر
خب کد بالا ابتدا با ایندکس بود. بعد با دو روش با خود آیتم ها گفتم. یعنی نه ایندکسی نه تعداد space ها. بلکه خود item ها.
دقت کنید.

بله . حق با شماست . دستور شما میاد خود اون اسم آیتم هارو بر میگردونه . کاملا صحیحه . ولی اصل مطلب همون تیکه کد دستور ایفش بود.