PDA

View Full Version : بدست اوردن ايندكس يك كلمه كه تكرار شده ایا باید از Regular Expression استفاده بشه؟



sabz12
سه شنبه 09 تیر 1394, 20:28 عصر
با IndexOf مي تونم ايندكس اولين كلمه را بدست اورد پس براي كلمات بعدي بايد از چي استفاده كرد فرض کنید تعداد نامشخص کلمه(علی )داریم برای هر کدام که سلکت می کنیم ایندکسش را بدست بیارم فکر کنم باید از Regular Expression استفاده بشه؟؟ اگر در این مورد کمک کنید ممنون می شم در نهایت می خواهم تا جایی که یک کلمه را سلکت کردم بشماره (همه کلمات سلکت شده را نه ،فقط تاجایی که سلکت کردیم)یک کد را نوشتم که کل کلمه سلکت شده را می شماره کافی تو رویداد موس اپ بزارید اگر ایندکس کلمه سلکت شده را داشتم می گفتم تا اونجا بشماره یک جرقه ای چیزی ...قبلا تشکر می کنم از توجه شما اساتید
private void richTextBox_MouseUp(object sender, MouseEventArgs e) {
string sent = richTextBox.Text;
string word = richTextBox.SelectedText.Trim();
int indext = 0;
int count = 0;
if (word != "")
{

while (((indext=sent.IndexOf(word,indext))!=-1))
{
indext++;
count++;
}


}
this.Text = count.ToString();


}

CrafteR
سه شنبه 09 تیر 1394, 21:55 عصر
با سلام

بله شما میتونید از RegularExpressions استفاده کنید.
نمونه کد:

string sent = "Hello World!!! Hello Hello"; string word = "Hello";
Regex rx = new Regex(word);
int count = rx.Matches(sent).Count;
foreach (Match m in rx.Matches(sent))
{
int index = m.Index;
//do your work with index
}

sabz12
چهارشنبه 10 تیر 1394, 11:25 صبح
تشكر از توجه شما ولي اين كه فرقي با كد بالا نداره كل يك كلمه را مي شماره؟!!!من اين جوري تغييرش دادم ولي جواب نداد مي خوام وقتي سه كلمه شبي هم بود دومي را كه سلكت كردم بشماره 2 يا اين كه ايندكسش را بده منظورم را متوجه مي شيد؟


private void richTextBox_MouseUp(object sender, MouseEventArgs e)
{
string sent = richTextBox.Text; string word = richTextBox.SelectedText.Trim();
System.Text.RegularExpressions.Regex rx = new System.Text.RegularExpressions.Regex(word);
int count = rx.Matches(sent).Count;
foreach (System.Text.RegularExpressions.Match m in rx.Matches(sent))
{
int index = m.Index;
//do your work with index
}
this.Text = count.ToString();
}

CrafteR
چهارشنبه 10 تیر 1394, 12:03 عصر
تشكر از توجه شما ولي اين كه فرقي با كد بالا نداره كل يك كلمه را مي شماره؟!!!من اين جوري تغييرش دادم ولي جواب نداد مي خوام وقتي سه كلمه شبي هم بود دومي را كه سلكت كردم بشماره 2 يا اين كه ايندكسش را بده منظورم را متوجه مي شيد؟


private void richTextBox_MouseUp(object sender, MouseEventArgs e)
{
string sent = richTextBox.Text; string word = richTextBox.SelectedText.Trim();
System.Text.RegularExpressions.Regex rx = new System.Text.RegularExpressions.Regex(word);
int count = rx.Matches(sent).Count;
foreach (System.Text.RegularExpressions.Match m in rx.Matches(sent))
{
int index = m.Index;
//do your work with index
}
this.Text = count.ToString();
}


الان متوجه شدم.
شما میتونید از این رویداد SelectionChanged استفاده کنید:

void RichTextBox1SelectionChanged(object sender, EventArgs e)
{
if (richTextBox1.SelectionLength > 0)
{
int index = richTextBox1.SelectionStart;
MessageBox.Show(index.ToString());
}
}

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

sabz12
چهارشنبه 10 تیر 1394, 13:03 عصر
عالي
اگر اون كد هم بزاري كه بتونم كلمه را بشماره ممنون مي شم چون هر روشي يك اموزش جديد هست و روش شما عالي هست ممنون از راهنماي.

CrafteR
چهارشنبه 10 تیر 1394, 13:21 عصر
عالي
اگر اون كد هم بزاري كه بتونم كلمه را بشماره ممنون مي شم چون هر روشي يك اموزش جديد هست و روش شما عالي هست ممنون از راهنماي.


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());
}
}

sabz12
چهارشنبه 10 تیر 1394, 13:37 عصر
كد خيلي خوبي ولي يك مشكي داره اگر بخواهيم بر اساس فاصله بشماره يعنيtrim() را بش بگنجونيم چكار بايد كرد.مثلا اين مثال ab abab ab حالا اگر ab اخري را سلكت كنيم 4 مي شماره در صورتي كه مي خوام 2 نشون بده چه تغييري بايد داد؟

CrafteR
چهارشنبه 10 تیر 1394, 13:41 عصر
یه فاصله به قبل و بعد از کلمه انتخاب شده اضافه کن.

sabz12
چهارشنبه 10 تیر 1394, 13:47 عصر
اتفاقا كارم جوري كه بر اساس فاصله كار ميكنه اين كد شما يكم فراتر از انتظار هست (همين ab abab ab ) فاصله هم بينشون هست !؟