PDA

View Full Version : سوال: یافتن کلمات در متن



jebreily
چهارشنبه 06 آذر 1398, 19:05 عصر
من یه متن دارم چجوری می تونم بگم یک قسمتی رو در نظر بگیره ؟؟
حالا اون قسمت رو در نظر گرفتیم (مثلا یک کلمه) چجوری بگم که کلمه بعدی اش رو پیدا کنه ؟؟؟

mmbguide
چهارشنبه 06 آذر 1398, 20:21 عصر
درخصوص کار با مقادیر رشته ای جستجو کنید. البته پیشنها میکنم بیشتر در خصوص کار با RichTextBox جستجو کنید

the king
چهارشنبه 06 آذر 1398, 20:26 عصر
من یه متن دارم چجوری می تونم بگم یک قسمتی رو در نظر بگیره ؟؟
حالا اون قسمت رو در نظر گرفتیم (مثلا یک کلمه) چجوری بگم که کلمه بعدی اش رو پیدا کنه ؟؟؟

در چی در نظر بگیره؟ داخل TextBox؟ یا داخل متغیر string؟
فرضا یک textBox1 داریم. بهش میگیم از کاراکتر اندیس 4 ام به طول 5 کاراکتر رو انتخاب کن و Selection کن :


private void button1_Click(object sender, EventArgs e)
{
textBox1.Select(4, 5);
}

private void Form1_Load(object sender, EventArgs e)
{
textBox1.Text = "This is a test";
textBox1.HideSelection = false;
}

یا فرضا میگیم الان که کاربر در textBox کلمه ای رو کامل یا ناقص انتخاب کرده برو جلو و کلمه بعدی رو انتخاب کن :


private void button1_Click(object sender, EventArgs e)
{
var start = textBox1.SelectionStart;
var length = 0;
for (; ((start < textBox1.TextLength) && (char.IsWhiteSpace(textBox1.Text[start]) == false)); start++)
{
}
for (; ((start < textBox1.TextLength) && (char.IsWhiteSpace(textBox1.Text[start]))); start++)
{
}
for (; ((start + length < textBox1.TextLength) && (char.IsWhiteSpace(textBox1.Text[start + length]) == false)); length++)
{
}
textBox1.Select(start, length);
}

jebreily
پنج شنبه 07 آذر 1398, 12:31 عصر
در متغیر استرینگ

ASHKANLAEI
پنج شنبه 07 آذر 1398, 13:29 عصر
ببینید به نظرم سوالتون رو خوب مطرح نکردین بهتره چند نمونه ورودی خروجی یا حداقل کدتون که تا الان نوشتین رو قرار بدین.
الان عبارت «در نظر بگیره» چه معنایی داره؟

the king
پنج شنبه 07 آذر 1398, 14:09 عصر
در متغیر استرینگ

اگر در متغیر string باشه، باید از قبل بدونید که از کجا تا کجا رو می خواهید انتخاب کنید، مثل همون مثال کدی که نوشتم موقعیت شروع start و طول انتخاب یعنی length اش مهمه.
اگر میدونید کجا است که با SubString به سادگی انتخابش می کنید :


var s1 = "This is a sample text.";
var s2 = s1.Substring(10, 6);


اگر نمیدونید و دنبالش بگردید و پیدا بشه باز میشه انتخابش کرد ولی کاربردی نیست چون اگه متنی که لازم داریم در دستمون هست چرا جای دیگه دنبالش بگردیم؟


var s1 = "This is a sample text.";
var pos = s1.IndexOf("sample");
if (pos >= 0)
{
var s2 = s1.Substring(pos, 6);
}


در مورد رفتن به کلمه بعدی هم همین قاعده هست، اگر محل شروع کلمه قبلی رو در متن بدونید میتوانید کلمه بعدی رو بدست بیارید، مثلا میدونید sample کجا است و حالا عبارت بعدی اش رو میخواهید :


var s1 = "This is a sample text.";
var start = s1.IndexOf("sample");
var length = 0;
for (; ((start < s1.Length) && (char.IsWhiteSpace(s1[start]) == false)); start++)
{
}
for (; ((start < s1.Length) && (char.IsWhiteSpace(s1[start]))); start++)
{
}
for (; ((start + length < s1.Length) && (char.IsWhiteSpace(s1[start + length]) == false)); length++)
{
}
var nextWord = s1.Substring(start, length);

jebreily
پنج شنبه 07 آذر 1398, 15:18 عصر
اگر در متغیر string باشه، باید از قبل بدونید که از کجا تا کجا رو می خواهید انتخاب کنید، مثل همون مثال کدی که نوشتم موقعیت شروع start و طول انتخاب یعنی length اش مهمه.
اگر میدونید کجا است که با SubString به سادگی انتخابش می کنید :


var s1 = "This is a sample text.";
var s2 = s1.Substring(10, 6);


اگر نمیدونید و دنبالش بگردید و پیدا بشه باز میشه انتخابش کرد ولی کاربردی نیست چون اگه متنی که لازم داریم در دستمون هست چرا جای دیگه دنبالش بگردیم؟


var s1 = "This is a sample text.";
var pos = s1.IndexOf("sample");
if (pos >= 0)
{
var s2 = s1.Substring(pos, 6);
}


در مورد رفتن به کلمه بعدی هم همین قاعده هست، اگر محل شروع کلمه قبلی رو در متن بدونید میتوانید کلمه بعدی رو بدست بیارید، مثلا میدونید sample کجا است و حالا عبارت بعدی اش رو میخواهید :


var s1 = "This is a sample text.";
var start = s1.IndexOf("sample");
var length = 0;
for (; ((start < s1.Length) && (char.IsWhiteSpace(s1[start]) == false)); start++)
{
}
for (; ((start < s1.Length) && (char.IsWhiteSpace(s1[start]))); start++)
{
}
for (; ((start + length < s1.Length) && (char.IsWhiteSpace(s1[start + length]) == false)); length++)
{
}
var nextWord = s1.Substring(start, length);

ممنون از شما
اگر بخواهم بگویم کلمه قبلی اش رو پیدا کنه چی ؟؟؟

the king
پنج شنبه 07 آذر 1398, 15:57 عصر
ممنون از شما
اگر بخواهم بگویم کلمه قبلی اش رو پیدا کنه چی ؟؟؟

دقیقا جهت معکوس میشه، بجای ++ از -- استفاده می کنیم و بجای اینکه حواسمون به انتهای رشته رسیدن باشه، به ابتدای رشته رسیدن حساسیت نشون میدیم :


var s1 = "This is a sample text.";
var start = s1.IndexOf("sample");
var length = 1;
for (; ((start >= 0) && (char.IsWhiteSpace(s1[start]) == false)); start--)
{
}
for (; ((start > 0) && (char.IsWhiteSpace(s1[start]))); start--)
{
}
for (; ((start > 0) && (char.IsWhiteSpace(s1[start - 1]) == false)); length++, start--)
{
}
var prevWord = (start >= 0) ? s1.Substring(start, length) : "";

jebreily
پنج شنبه 07 آذر 1398, 16:48 عصر
دقیقا جهت معکوس میشه، بجای ++ از -- استفاده می کنیم و بجای اینکه حواسمون به انتهای رشته رسیدن باشه، به ابتدای رشته رسیدن حساسیت نشون میدیم :


var s1 = "This is a sample text.";
var start = s1.IndexOf("sample");
var length = 1;
for (; ((start >= 0) && (char.IsWhiteSpace(s1[start]) == false)); start--)
{
}
for (; ((start > 0) && (char.IsWhiteSpace(s1[start]))); start--)
{
}
for (; ((start > 0) && (char.IsWhiteSpace(s1[start - 1]) == false)); length++, start--)
{
}
var prevWord = (start >= 0) ? s1.Substring(start, length) : "";


من نمیدونم که چطوری باید از شما تشکر کنم ؟؟؟
بسیار بسیار ممنون هستم
من رو شرمنده کردید واقعاً
ممنون
سپاس فراوان:قلب::قلب::قلب::قلب: