PDA

View Full Version : سوال: الگوریتم جستجو بر روی خروجی این فایل امکان پذیر است



sooren_66
یک شنبه 09 فروردین 1394, 19:40 عصر
با سلام
چطور میشه این کد رو با آرایه نوشت آیا همینجور که هست میشه توی خروجیش سرچ انجام داد که یک خروجیه مورد نظر رو پیدا کنه؟


private void GenerateButton_Click(object sender, EventArgs e)
{
DateTime t1 = DateTime.Now;
using (System.IO.StreamWriter file = new System.IO.StreamWriter(_filename))
for (int i = 1; i <= 10000000; i++)
{
file.WriteLine(i + ";" + i + "user_te");
if (i % 1000000 == 0)
{
label1.Text = i.ToString();
label1.Refresh();
}
}
label1.Text = (DateTime.Now - t1).TotalMilliseconds.ToString();
}

sooren_66
چهارشنبه 12 فروردین 1394, 02:20 صبح
دوستان کسی نیست بتونه بفهمه با چه الگوریتم چستجویی بهتره تو خروجی این فایل سرچ کرد؟عکس خروجی رو هم میزارم


129942

sooren_66
چهارشنبه 12 فروردین 1394, 11:43 صبح
دوستان خروجی رو هم براتون گذاشتم کسی نیست کمک کنه

am_al_59
پنج شنبه 13 فروردین 1394, 00:26 صبح
چی رو میخواهید جستجو کنید؟
یک عبارت رو میخواهید جستجو کنید؟
جستجوی عبارت کاری نداره اگر تعداد خطوط مشخصه میتوانید از آرایه با طول ثابت استفاده کنید
اگر مشخص نیست باید از انواع دیگری مثل List استفاده کنی که در C# میشه List<string>
شکل همون لیست پیوندی خودمون در ساختمان داده هست برای وقتی که تعداد آیتم ها مشخص نیست
اگر بفرمایین من دقیقاً کدشو بهتون میگم

sooren_66
پنج شنبه 13 فروردین 1394, 02:58 صبح
چی رو میخواهید جستجو کنید؟
یک عبارت رو میخواهید جستجو کنید؟
جستجوی عبارت کاری نداره اگر تعداد خطوط مشخصه میتوانید از آرایه با طول ثابت استفاده کنید
اگر مشخص نیست باید از انواع دیگری مثل List استفاده کنی که در C#‎ میشه List<string>
شکل همون لیست پیوندی خودمون در ساختمان داده هست برای وقتی که تعداد آیتم ها مشخص نیست
اگر بفرمایین من دقیقاً کدشو بهتون میگم

یوزر رو می خوام جستجو کنم
شکلش توی خروجی هست

am_al_59
پنج شنبه 13 فروردین 1394, 03:08 صبح
اگر تعداد یوزرها معلوم نیست میتونین از List استفاده کنید کدشو دقیقاً زیر کد نوشتن در فایل نوشتم

private void GenerateButton_Click(object sender, EventArgs e)
{
List<string> userList = new List<string>();//این خط لیستو ایجاد میکنه
DateTime t1 = DateTime.Now;
using (System.IO.StreamWriter file = new System.IO.StreamWriter(_filename))
for (int i = 1; i <= 10000000; i++)
{
file.WriteLine(i + ";" + i + "user_te");
userList.Add(i + ";" + i + "user_te");//این خط لیستو پر میکنه
if (i % 1000000 == 0)
{
label1.Text = i.ToString();
label1.Refresh();
}
}
label1.Text = (DateTime.Now - t1).TotalMilliseconds.ToString();
userList.Any(user=>user=="user12");//این کل لیستو میگرده اگر یوزر بود True برمیگردونه
}



دیگه مشخصه که بیرون متد لیست قابل استفاده نیست اگر بخواین بیرون متد هم لیستو داشته باشین باید اونو بصورت Field یا Property تعریف کنین
Field میشه:

private List<string> userList = new List<string>();

Property میشه:


public List<string> UserList { get; set; }

که هرکدوم رو که انتخاب کنین بیرون تعریف متد باید تایپ بشه با فیلد کد اینطوری میشه


private List<string> userList = new List<string>();


private void GenerateButton_Click(object sender, EventArgs e)
{
DateTime t1 = DateTime.Now;
using (System.IO.StreamWriter file = new System.IO.StreamWriter(_filename))
for (int i = 1; i <= 10000000; i++)
{
file.WriteLine(i + ";" + i + "user_te");
userList.Add(i + ";" + i + "user_te");
if (i % 1000000 == 0)
{
label1.Text = i.ToString();
label1.Refresh();
}
}
label1.Text = (DateTime.Now - t1).TotalMilliseconds.ToString();


userList.Any(user => user == "user12");
}

sooren_66
پنج شنبه 13 فروردین 1394, 15:15 عصر
میخوام کلید سرچ جداگونه باشه یعنی کد جستجو توی دکمه ی جستجو باشه و با زدن توی فایلی که از قبل ساختم و آدرسش رو دادم جستجو کنه

am_al_59
پنج شنبه 13 فروردین 1394, 15:28 عصر
در این پاسخ فرض شده که شما فایل خروجیتونو در حالت Text ذخیره کردین
چون فایل وجود داره و تعداد رکوردهاش هم مشخصه نیازی به لیست ندارید و به نظرم آرایه مناسب تر و سریع تر باشه
کد برای خواندن دادهها و کنترل وجود یک یوزر به این شکله:

private void SearchButton_Click(object sender, EventArgs e)
{
StreamReader userFileReader = new StreamReader("fileNameAndAddress");
//خط بالا فایل رو در حالت متنی باز میکنه
string[] usersArray = userFileReader.ReadToEnd().Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries);
//خط بالا فایلی که در حالت متنی باز شده رو تا انتها میخونه و رشته حاصل رو بر اساس کاراکتر خط جدید به چندین رشته میشکنه و در آرایه قرار میده
//قسمت StringSplitOptions.RemoveEmptyEntries باعث میشه رشته های null خودکار حذف بشن
userFileReader.Close();
usersArray.Any(a => a == "userName");
//این خط هم که دیگه مشخصه اگر یوزر وجود داشت True رو بر میگردونه
}


در این کد از using برای اطمینان از آزادسازی حافظه استفاده نشده