PDA

View Full Version : جستجو و شمردن کلمه بشرطی که ایندکس بعدیش فاصله باشه



sabz12
جمعه 12 تیر 1394, 20:18 عصر
چطور حالیش کنم که کلمه بعدیش را در نظر بگیره اگر فاصله بود یک کلمه در نظر بگیره و بشماره به بیان دیگر این کد را ببینید کل کلمه اینگلیسی را میشماره ولی اگر کلمه ما"ab"باشه تو
استریگ"ab abab ab" زیر چهار میشماره در صورتی که باید 2 بشماره . یک رچباکس دارم که پر از کلمات به صورت کد هستند و شبیه هم می خواهم بر اساس فاصله یک کلمه یک کلمه جدا سازی شوند و بشمارمشون این کد هر کلمه ای که سلکت شود می شماره ولی اون قانون فاصله را رعایت نمی کنه.نمونه رچباکسم تمام حروف اینگلیسی هست( ad adad adas asas as ad aadd adddd ad).از توجه شما سپاس گذارم.
void RichTextBox1SelectionChanged(object sender, EventArgs e){
if (richTextBox1.SelectionLength > 0)
{
int index = richTextBox1.SelectionStart;
string word = richTextBox1.SelectedText;

int count = 0, lastIndex = 0;
for (int i = 0; i< index; i = word.Length + lastIndex)
{
lastIndex = richTextBox1.Text.IndexOf(word, i);
if (lastIndex != -1)
count++;
}
MessageBox.Show(count.ToString());
}
}

khokhan
جمعه 12 تیر 1394, 20:38 عصر
چطور حالیش کنم که کلمه بعدیش را در نظر بگیره اگر فاصله بود یک کلمه در نظر بگیره و بشماره به بیان دیگر این کد را ببینید کل کلمه اینگلیسی را میشماره ولی اگر کلمه ما"ab"باشه تو
استریگ"ab abab ab" زیر چهار میشماره در صورتی که باید 2 بشماره . یک رچباکس دارم که پر از کلمات به صورت کد هستند و شبیه هم می خواهم بر اساس فاصله یک کلمه یک کلمه جدا سازی شوند و بشمارمشون این کد هر کلمه ای که سلکت شود می شماره ولی اون قانون فاصله را رعایت نمی کنه.نمونه رچباکسم تمام حروف اینگلیسی هست( ad adad adas asas as ad aadd adddd ad).از توجه شما سپاس گذارم.
void RichTextBox1SelectionChanged(object sender, EventArgs e){
if (richTextBox1.SelectionLength > 0)
{
int index = richTextBox1.SelectionStart;
string word = richTextBox1.SelectedText;

int count = 0, lastIndex = 0;
for (int i = 0; i< index; i = word.Length + lastIndex)
{
lastIndex = richTextBox1.Text.IndexOf(word, i);
if (lastIndex != -1)
count++;
}
MessageBox.Show(count.ToString());
}
}


.................................................. ...................

private void button1_Click(object sender, EventArgs e)
{
int chrcount;
int spascount;
string name = richTextBox1.Text;
chrcount = name.Split(' ').Length;
spascount = name.Count(Char.IsWhiteSpace);
MessageBox.Show("تعداد کلمه : " + chrcount + "\n" + "تعدادکلمه با فاصله فاصله" + chrcount);

}

و یا اینکه :


int count = str.TakeWhile(Char.IsWhiteSpace).Count();

sabz12
جمعه 12 تیر 1394, 20:58 عصر
با تشکر
همونی که می خوام نیست ولی فکر کنم باید مخلوتش کنم می خواهم از ابتدا بشماره تا جایی که سلکت کردم

sabz12
شنبه 13 تیر 1394, 16:35 عصر
اساتيد گرامي
كد را يك تغييري دادم و در ارايه ريختم ولي بازم مشكل داره ميخواهم تا جايي كه سلكت كردم كلمه سلكت شده را بشماره يك ياري به ما تازه كارها بكنيد سپاس
private void richTextBoxCod_SelectionChanged(object sender, EventArgs e) {

string[] kol = richTextBoxCod.Text.Split(' ');
string kalame=richTextBoxCod.SelectedText.Trim();
int indexS = richTextBoxCod.SelectionStart;
int kalameLing = kalame.Length;
int kolLing = 0;
int count = 0;
int IndexKol = 0;
string word = richTextBoxCod.SelectedText.Trim();
if (richTextBoxCod.SelectionLength > 0)
{
foreach (string item in kol)
{
if (kolLing <= kalameLing)
{
if (IndexKol < indexS)
{




if (kol[IndexKol] == kalame)
{
kolLing += kol[IndexKol].Length + kolLing;
count++;
IndexKol++;


}
else if (kol[IndexKol] != kalame)
{
kolLing += kol[IndexKol].Length + kolLing;
IndexKol++;
}
}
}


}
MessageBox.Show(count.ToString()) ;
}


}

sabz12
دوشنبه 15 تیر 1394, 12:33 عصر
چطوري تكميلش كنم از چه متدي؟؟؟

private void richTextBox_SelectionChanged(object sender, EventArgs e) { if (richTextBox.SelectionLength > 0)
{

}


////////
string[] kol = richTextBox.Text.Split(' ');
string kalame = richTextBox.SelectedText.Trim();
int indexS = richTextBox.SelectionStart;
int kalameIndks = richTextBox.SelectionStart;
int kolTadad = 0;
int count = 0;
int IndexKol = 0;
string word = richTextBoxCod.SelectedText.Trim();


foreach (string item in kol)
{
kolTadad++;
}
if (richTextBox.SelectionLength > 0)
{
foreach (string item in kol)
{


if (kalame == kol[IndexKol])
{


count++;
IndexKol++;


}
else if (IndexKol <kol.Length+ kalameIndks)
{ IndexKol++; }
else { return; }


}
MessageBox.Show(count.ToString());
}

Javad_raouf
دوشنبه 15 تیر 1394, 12:47 عصر
سلام
این یک روش ابتکاری و جالب از خودم:لبخند:
string Text = "ad adad adas asas as ad aadd adddd ad";
string Kalame = "ad";
string[] Aray = (" " + Text + " ").Split(new string[] { " " + Kalame + " " }, StringSplitOptions.None);
MessageBox.Show("Count Find: " + (Aray.Length - 1));

تست شده

sabz12
دوشنبه 15 تیر 1394, 12:54 عصر
يعني بزارمش تو همون private void richTextBoxCod_SelectionChanged(object sender, EventArgs e) جواب ميده؟؟؟

Javad_raouf
دوشنبه 15 تیر 1394, 13:07 عصر
يعني بزارمش تو همون privatevoidrichTextBoxCod_SelectionChanged(objects ender, EventArgs e) جواب ميده؟؟؟
ببخشید فکر کنم من سوال رو خوب متوجه نشدم این کدی که من نوشتم کاری که می کنه کلمه ad رو توی عبارت Text سرچ می کنه و تعداد رو بر می گردونه، ضمن اینکه هوشمنده و adad رو نمیشماره
البته فکر کنم اصل سوال شما هم همین بود
اما اینجور که الان فهمیدم شما می خوای این جستجو در خود RichTextBox انجام بشه
پس شما باید یک همچین کدی بنویسی
private void richTextBox1_SelectionChanged(object sender, EventArgs e)
{
string Text = richTextBox1.Text;
string Kalame = richTextBox1.SelectedText.Trim();
string[] Aray = (" " + Text + " ").Split(new string[] { " " + Kalame + " " }, StringSplitOptions.None);
this.Text = "Count Find: " + (Aray.Length - 1);
}

sabz12
دوشنبه 15 تیر 1394, 19:17 عصر
شما اگر داخل رچباکس این کلمات را داشته باشید و سلکت کنید تعداد دقیق ان را می خواهیم داشته باشیم یعنی اگر علی سومی را سلکت کردیم سه نشون بده و اگر ششمی راسلکت کردیم 6 نشون بده و علیرضا هم جدا شمارش کنه.از یاری شما سپاس گذاریم
ali ali ali ali ali alireza alireza ali alireza alireza ali

Javad_raouf
سه شنبه 16 تیر 1394, 10:14 صبح
اینم یک کد بی نقص ولی پیچیده برای اون چیزی که شما می خوای:
private void richTextBox1_SelectionChanged(object sender, EventArgs e)
{
int start = richTextBox1.SelectionStart;
int Len = richTextBox1.SelectionLength;
while (Len > 0 && richTextBox1.Text.Substring(start + Len - 1, 1) == " ")
Len--;
while (start < richTextBox1.Text.Length && richTextBox1.Text.Substring(start, 1) == " ")
start++;
if (Len <= 0)
return;
if (start == richTextBox1.Text.Length)
return;
while (richTextBox1.Text.Length > start + Len && richTextBox1.Text.Substring(start + Len, 1) != " ")
Len++;
while (start > 0 && richTextBox1.Text.Substring(start - 1, 1) != " ")
{
start--;
Len++;
}
string Text = richTextBox1.Text.Substring(0, start + Len);
string Kalame = richTextBox1.Text.Substring(start, Len);
string[] Aray = (" " + Text.Replace(" ", " ") + " ").Split(new string[] { " " + Kalame + " " }, StringSplitOptions.None);
this.Text = "Count Find: " + (Aray.Length - 1);
}
دقیقا همون چیزیه که می خوای به علاوه اینکه اگر کاربر قسمتی از کلمه رو هم Select کنه سیستم خودکار کل کلمه رو در نظر می گیره

sabz12
سه شنبه 16 تیر 1394, 11:38 صبح
نه اين كه فقط يك نشون ميده از چپ به راست تا جايي كه سلكت كرديم مي خواهيم بشماره.خدايش منظور من مشخص نيست ببینید باید کلمه سلکت شده مشخصه ای داشته باشه که من بهش بگم تا اینجا را بشمار نه بیشتر نه کمتر .خوب تازه کاری و هزار سودا:بامزه:

khokhan
سه شنبه 16 تیر 1394, 15:44 عصر
نه اين كه فقط يك نشون ميده از چپ به راست تا جايي كه سلكت كرديم مي خواهيم بشماره.خدايش منظور من مشخص نيست ببینید باید کلمه سلکت شده مشخصه ای داشته باشه که من بهش بگم تا اینجا را بشمار نه بیشتر نه کمتر .خوب تازه کاری و هزار سودا:بامزه:
.................................................. ..........:لبخند:

sabz12
سه شنبه 16 تیر 1394, 16:23 عصر
خدایش چرا رچباکس را پر کردید خوب هرچی بخواد کاربر وارد میکنه؟!!!! اینم که درست نمی شماره:افسرده:

khokhan
سه شنبه 16 تیر 1394, 16:45 عصر
خدایش چرا رچباکس را پر کردید خوب هرچی بخواد کاربر وارد میکنه؟!!!! اینم که درست نمی شماره:افسرده:
من فقط راه درستش رو بهتون نشون دادم (تمام اعمالی رو که شما در چندین سطر نتونسته بودین درست کنین ، در نیم سطر کد براتون درس کردم).......................... :لبخند:

حالا دیگه بقیه اش با خودتونه که مطابق نیازتون تغییرات لازم رو بدین

می تونین با اون کدهایی که توی پست 2 گذاشتم هم کاملش کنین

sabz12
سه شنبه 16 تیر 1394, 17:56 عصر
خیلی ممنون
خوب اون پست دوم چون ساده تر بود بازم بررسی کردم اگر خط 7 را کامند کنیم رو نتیجه شمردن فرقی نمیکنه و همون خط این کد IsWhiteSpaceچکار میکنه؟اگر هم پیامی تو اون نوشته ها باشه من دنبال اینم که کلمه سلکت شده را یک مشخصه داشته باشه که بگم تا اینجا بشماره وگرنه شمردردن کل کلمه هدفم نیست.خوب بی تجربه ام دیگه استاد دریاب مارا