PDA

View Full Version : سوال: بدست آوردن خطوط قبل از خط مورد نظر از یک متن



asrehoshmand
یک شنبه 30 خرداد 1395, 09:28 صبح
سلام دوستان

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

mrprestige
یک شنبه 30 خرداد 1395, 19:22 عصر
( کد اصلاح شده )

سلام دوست من وقتت بخیر ،خیلی ببخشید اگه منظورت رو اون اول متوجه نشدم ، این کدی هست که شما میخواید این کد اول میاد فایل متنی تون رو بررسی میکنه خط به خط داخل آرایه قرار میده و بعد از اون شروع به بررسی کلمه ی " Ok" میکنه به محض پیدا کردن اون با توجه به مقداری که بهش به عنوان ورودی میدید ( نسبت به اون فایل متنی تون ) قبل اون هر مقداری دیگه ای باشه رو نشون میده داخل یه کنترل دیگه . باز اگه برات از این سوالی پیش اومد بگو که جواب بدم .

string n =textBox1.Text;
listBox1.Items.Clear();
string[] lines = File.ReadLines("C:\\Test.txt").ToArray();
int I1 = 0;
int I2 = 0;
for (int i = 0; i < lines.Length; i++)
{
I1 = lines[i].IndexOf("Ok");
I2 = lines[i].IndexOf(n);
if (I1 == -1)
{
if ((I2 == -1))
{
listBox1.Items.Add(lines[i]);
}
else
{
return;
}
}
else
{
break;
}
}



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

mn_acer1
یک شنبه 30 خرداد 1395, 19:52 عصر
سلام دوست من وقتت بخیر ، میتونید شما از طریق این کدی که براتون نوشتم هر رشته ای قبل از رشته ی مورد نظرتون رو چاپ کنید .

foreach (string line in File.ReadLines("C:\\Test.txt"))
{

if (line.Contains("Ok"))
{
break;
}
listBox1.Items.Add(line);
}


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

البته با یه کمی تفاوت در این کد! دوست سوال کننده خواسته بود n خط قبل تر از خط OK رو نمایش بده!
برای این کار به نظرم کل خط های فایل رو بریز تو یه آرایه بعد با یه حلقه ببین کدوم خط توش OK داره بعد بیا بزن array[OKline-n] رو نمایش بده

mrprestige
دوشنبه 31 خرداد 1395, 19:36 عصر
البته با یه کمی تفاوت در این کد! دوست سوال کننده خواسته بود n خط قبل تر از خط OK رو نمایش بده!
برای این کار به نظرم کل خط های فایل رو بریز تو یه آرایه بعد با یه حلقه ببین کدوم خط توش OK داره بعد بیا بزن array[OKline-n] رو نمایش بده
سلام به دوست خوبم mn_acer1 (http://barnamenevis.org/member.php?229401-mn_acer1) اول اینکه خیلی ممنون از یادوری که کردی کدها رو اصلاح کردم برای اون بنده خدا ، همینطور ازت یه انتقاد دارم کاشکی همینطور ایراد کارم رو بهم گفتی به جا اینکه فقط به اون بنده خدا توضیح بدی به صورت متنی میومدی خودت کد رو مینوشتی تا هم اون بنده خدا متوجه بشه منظورت رو و هم شاید این سوال خیلی های دیگه هم باشه دوست دارن بدونن که جواب چی میشه دوست من اینطوری که شما نوشتید با اینکه نیت شما کمک به اون بوده ولی طرف مقابل شما ممکنه فکر کنه که دارید سوادتون رو به رخ اون میکشید . و این خیلی بده . و شاید ممکنه طرف حتی از کدنویسی هم زده بشه . بازم ممنون بابت یادآوری و امیدوارم که همیشه موفق باشی.


از کدنویسی لذت ببری .

mn_acer1
دوشنبه 31 خرداد 1395, 23:28 عصر
سلام به دوست خوبم mn_acer1 (http://barnamenevis.org/member.php?229401-mn_acer1) اول اینکه خیلی ممنون از یادوری که کردی کدها رو اصلاح کردم برای اون بنده خدا ، همینطور ازت یه انتقاد دارم کاشکی همینطور ایراد کارم رو بهم گفتی به جا اینکه فقط به اون بنده خدا توضیح بدی به صورت متنی میومدی خودت کد رو مینوشتی تا هم اون بنده خدا متوجه بشه منظورت رو و هم شاید این سوال خیلی های دیگه هم باشه دوست دارن بدونن که جواب چی میشه دوست من اینطوری که شما نوشتید با اینکه نیت شما کمک به اون بوده ولی طرف مقابل شما ممکنه فکر کنه که دارید سوادتون رو به رخ اون میکشید . و این خیلی بده . و شاید ممکنه طرف حتی از کدنویسی هم زده بشه . بازم ممنون بابت یادآوری و امیدوارم که همیشه موفق باشی.


از کدنویسی لذت ببری .


سلام، خواهش میکنم.
شرمنده من امروز امتحان داشتم اینه که دیروز فرصت نشد کد کامل رو بنویسم، شرمنده قصد جسارت نبود. فقط من هم در راستای همین که این بنده خدا جواب درست بگیره یادآوری کردم.
چشم تو همین پست میرنم کد رو!

در مورد گفتن ایراد کار هم البته نیت بدی نداشتم من چون خودم وقتی تو سایت StackOverflow سوالی میپرسم/جوابی میدم (البته نه همشون) سریع هی همه رای منفی میدن بش بدون اینکه اشکال کار رو به آدم بگن و من خودم با این مسئله خیلی مشکل دارم سعی میکنم حتی الامکان پست نزارم تو اون سایت. واقعا نمیدونم چرا سازنده های این سایت یه امکانی اضافی نمیکنن به سایتشون که کسی کی DownVote میکنه دلیلش هم حتما باید بگه اینطوری اون شخص اشکال کارش رو میفهمه! من هم رو همین حساب اشکال کدتون رو گفتم، وگرنه من اتفاقا خیلی تازه وارد و آماتور تر از این حرفام که بخوام به رخ بکشم سواد نداشتمو! بازم شرمنده اگه سوء تفاهمی پیش اومد!


تابع برای نمایش خط مورد نظر:
string showmyline(string filepath,int n)
{
string[] array_str = File.ReadAllLines(filepath);
int OKline = 0;
bool okfound = false;
string Result = "You don't have OK in your text!";
for (int i = 0; i < array_str.Length; i++)
{
if (array_str[i].ToUpper() == "OK")
{
okfound = true;
OKline = i;
break;
}
}
if (okfound)
{
Result = array_str[OKline - n];
}
return Result;
}

نمونه فراخوانی:
MessageBox.Show( showmyline(@"C:\testfile.txt", Convert.ToInt32(textBox1.Text)));


البته مثلا اگه چند تا OK تو فایله باشه فقط اولی رو در نظر میگیره اگه میخواین بقیه رو هم نمایش بدین باید برای Result هم از آرایه استفاده کنین. اگه خواستین بگین!