PDA

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



sooren_66
دوشنبه 11 اسفند 1393, 17:10 عصر
با سلام
من یک الگوریتم دارم برای ساخت یوزر و آیدی در یک فایل متنی.می خوام یک الگوریتم براش بنویسم که بتونم یه یوزر خاص رو درون این فایل متنی که ساخته شده پیدا کنم. تو تالار گشتم ولی سوال مشابه با سوال من پیدا نشد. این کد مربوط به ساخت فایل متنی هست با چندین یوزر و آیدی هست. پیشاپیش ممنونم از راهنماییتون.


private void button2_Click(object sender, EventArgs e)
{
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"d:\WriteLines2.txt"))
{
for (int i = 0; i < 20000000; i++)
{

file.WriteLine(i+";"+i+"user");
}
}
}

alexmcse
دوشنبه 11 اسفند 1393, 20:11 عصر
string path = @"d:\WriteLines2.txt"; string line = "";
List<string> find = new List<string>();
private void button2_Click(object sender, EventArgs e)
{
using (System.IO.StreamReader file = new System.IO.StreamReader(path))
{


line = file.ReadToEnd();
if (line.Contains(textBox1.Text))
{
find.Add(textBox1.Text);
}
else
{
MessageBox.Show("0 word find");
}


for (int j = 0; j < find.Count; j++)
{
listBox1.Items.Add(find[j]);
}
}


}
در لیست باکس نمایش دادم

mojtabamalaekeh
دوشنبه 11 اسفند 1393, 21:55 عصر
سلام

static IEnumerable<string> ReadFileToEnd(string path)
{
string line;
using (var reader = File.OpenText(path))
while ((line = reader.ReadLine()) != null)
yield return line.Split(';')[1];
}

private IEnumerable<string> Finder(string path, string username)
{
return from line in ReadFileToEnd(path)
where line.Contains(username)
//where line == username
select line;
}

private void FindButton_Click(object sender, EventArgs e)
{
var users = Finder(@"d:\WriteLines2.txt", "100user");
foreach (string username in users)
{
//your code
MessageBox.Show(username);
}
}
تابع Contains، عبارات مشابه رو هم پیدا میکنه.
اگه میخواین عین عبارت جستجو بشه، در تابع Finder، اون خطی که با // غیرفعال شده رو فعال کنید و خط بالاش که از Contains استفاده شده رو غیرفعال کنید.

به تابع ReadFileToEnd هم توجه کنید که هر خط از فایل رو ابتدا با کاراکتر ; تکه تکه میکنه توی یک آرایه (تابع Split این کار رو میکنه) و عنصر دوم آرایه (با ایندکس 1) رو برمیگردونه.
علت این کار، اینه که شما آیدی و نام کاربری رو با ; از هم جدا کردین. پس بکار بردن سمی کالن توی خود نام کاربری غیرمجازه.

اون تابع آخری هم دکمه ای برای تست هست که موارد پیدا شده رو با MessageBox نشون میده.
منظور اینه که با یک حلقه ی foreach میتونید نتایج رو پردازش کنید.
منبع: stackoverflow

sooren_66
سه شنبه 12 اسفند 1393, 00:19 صبح
سلام

static IEnumerable<string> ReadFileToEnd(string path)
{
string line;
using (var reader = File.OpenText(path))
while ((line = reader.ReadLine()) != null)
yield return line.Split(';')[1];
}

private IEnumerable<string> Finder(string path, string username)
{
return from line in ReadFileToEnd(path)
where line.Contains(username)
//where line == username
select line;
}

private void FindButton_Click(object sender, EventArgs e)
{
var users = Finder(@"d:\WriteLines2.txt", "100user");
foreach (string username in users)
{
//your code
MessageBox.Show(username);
}
}
تابع Contains، عبارات مشابه رو هم پیدا میکنه.
اگه میخواین عین عبارت جستجو بشه، در تابع Finder، اون خطی که با // غیرفعال شده رو فعال کنید و خط بالاش که از Contains استفاده شده رو غیرفعال کنید.

به تابع ReadFileToEnd هم توجه کنید که هر خط از فایل رو ابتدا با کاراکتر ; تکه تکه میکنه توی یک آرایه (تابع Split این کار رو میکنه) و عنصر دوم آرایه (با ایندکس 1) رو برمیگردونه.
علت این کار، اینه که شما آیدی و نام کاربری رو با ; از هم جدا کردین. پس بکار بردن سمی کالن توی خود نام کاربری غیرمجازه.

اون تابع آخری هم دکمه ای برای تست هست که موارد پیدا شده رو با MessageBox نشون میده.
منظور اینه که با یک حلقه ی foreach میتونید نتایج رو پردازش کنید.
منبع: stackoverflow

می خوام یه دکمه روی فرمم داشته باشم به نام سرچ که با زدن اون ، یوزر مورد نظرم از تو فایلی که کدش رو براتون گذاشتم پیدا کنه.من با فایل کار نکردم میشه راهنمایی کنید چطور از این کد استفاده کنم و کجاها رو تغییر بدم

mojtabamalaekeh
سه شنبه 12 اسفند 1393, 06:21 صبح
نمونه کد رو یه نگاه سریع که بکنید می بینید سه تا بلوک داره.
بلوک اولی با static شروع شده و اسمش ReadFileToEnd است
دومی با private شده و اسمش Finder است
سومی هم با private شروع شده و اسمش FindButton_Click است

شما بلوک اول و دوم رو دقیقا تو برنامه خودتون کپی کنید.
بلوک سوم هم دکمه ایه که جستجو رو انجام میده و کد داخلش رو باید کپی کنید توی دکمه ای که روی فرم برنامه خودتون دارین.
البته فقط خط اولش کافیه و اون حلقه foreach رو توی پست قبلی گفتم برای چیه.
بجای @"d:\WriteLines2.txt" مسیر فایلتون رو بذارین و بجای "100user" عبارتی رو که میخواین جستجو بشه.

اگه بعدا خواستین کارهای بیشتری با فایل انجام بدین، StreamReader و StreamWriter رو توی اینترنت جستجو کنید تا کلی نمونه کد بیاد.

alexmcse
سه شنبه 12 اسفند 1393, 08:50 صبح
با سلام
من یک الگوریتم دارم برای ساخت یوزر و آیدی در یک فایل متنی.می خوام یک الگوریتم براش بنویسم که بتونم یه یوزر خاص رو درون این فایل متنی که ساخته شده پیدا کنم. تو تالار گشتم ولی سوال مشابه با سوال من پیدا نشد. این کد مربوط به ساخت فایل متنی هست با چندین یوزر و آیدی هست. پیشاپیش ممنونم از راهنماییتون.


private void button2_Click(object sender, EventArgs e)
{
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"d:\WriteLines2.txt"))
{
for (int i = 0; i < 20000000; i++)
{

file.WriteLine(i+";"+i+"user");
}
}
}


لینک آموزش
https://msdn.microsoft.com/en-us/library/system.io.streamwriter(v=vs.110).aspx

https://social.msdn.microsoft.com/Search/en-US?query=streamwriter%20c%23&emptyWatermark=true&ac=3

:تشویق::تشویق: