PDA

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



sasan_22
یک شنبه 14 دی 1393, 18:26 عصر
سلام یه فایل خارجی دارم که اینطوری پر میشه:

154879,1234567895148726935
159874,5649872315487623148
154879,3025421056897461250
.
.
.
حالا م یخوام تو برنامم بر اساس اون قسمت 6تایی جستجو انجام بگیریه قسمت 19 تایی برگردانده بشه یعنی اگه 154879 را زدم بهم 1234567895148726935 خروجی بده.

تشکر فراوان

بیتا حکمت
یک شنبه 14 دی 1393, 18:43 عصر
این اعداد تو فایل به صورت خط به خط ذخیره شدن ؟

sasan_22
یک شنبه 14 دی 1393, 19:14 عصر
بله بعد از تمام شدن کد 19 رقمی کرسر میره خط بعد

بیتا حکمت
یک شنبه 14 دی 1393, 19:19 عصر
این کدی هست که فایل رو خط به خط میخونه
تو خط نهم از طریق متیغر Line چک کنید که زیر رشته مورد نظرتون داخل Line هست یا نه (( اسم تابعش یادم رفته )) ، اما تابعی هست که وجود یه زیر رشته رو تو رشته
چک می کنه ، بعدش اگر اون تابع تایید کرد که مثلا" 12345 داخل این Line هست می تونین اون line رو انتخاب کنید (( مثلا" بگید به کامبوباکس اضافه بشه چون این زیر رشته داخلش هست ))



int counter = 0;
string line;

// Read the file and display it line by line.
System.IO.StreamReader file =
new System.IO.StreamReader("c:\\test.txt");
while((line = file.ReadLine()) != null)
{
Console.WriteLine (line);
counter++;
}

file.Close();

// Suspend the screen.
Console.ReadLine();

sasan_22
یک شنبه 14 دی 1393, 19:21 عصر
اوکی مشکلی نیست بابت سرچش چ کنم همکار عزیز؟

RIG000
یک شنبه 14 دی 1393, 19:51 عصر
سوالت واضح نیست

malizergani
یک شنبه 14 دی 1393, 20:25 عصر
string file = @"C:\file.txt";

var contex = File.ReadAllLines(file);
var query = from line in contex
where line.Contains(@"09163236194")
select line;

foreach (var value in query)
{
MessageBox.Show(value);
}

sasan_22
یک شنبه 14 دی 1393, 20:54 عصر
دوست عزیزم این فایل دارای 3000 رکورده نمیشه همشو وارد برنامه کنم سرعت میاد پایین بهینه نیست این کار!

بیتا حکمت
یک شنبه 14 دی 1393, 21:06 عصر
دوست عزیزم این فایل دارای 3000 رکورده نمیشه همشو وارد برنامه کنم سرعت میاد پایین بهینه نیست این کار!

3000 از نظر من رکورد زیادی نیست ، من قبلا" برنامه نوشته بودم با Vb6 که از داخل تکست بخونه با کلی دستورات غیر استاندارد ، اما مشکلی پیش نمی اومد
اما اگر منطقی نمی دانید . یک دیتابیس درست کنید و خط ها رو به اون دیتابیس ارسال کنید ، اینجوری مشکل سرچ هم حل میشه

malizergani
یک شنبه 14 دی 1393, 21:10 عصر
دوست عزیزم این فایل دارای 3000 رکورده نمیشه همشو وارد برنامه کنم سرعت میاد پایین بهینه نیست این کار!


هرچند رکورد داشته باشد من این رو روی 1000000 رکورد تست کردم جواب رو در یک ثانیه بهتون میده.

string file = @"C:\file.txt";

var contex = File.ReadAllLines(file);
var query = from line in contex
where line.Contains(@"09163236194")
select line;

foreach (var value in query)
{
MessageBox.Show(value);
}

تست کن. نتیجه رو بده

بیتا حکمت
یک شنبه 14 دی 1393, 21:12 عصر
هرچند رکورد داشته باشد من این رو روی 1000000 رکورد تست کردم جواب رو در یک ثانیه بهتون میده.

string file = @"C:\file.txt";

var contex = File.ReadAllLines(file);
var query = from line in contex
where line.Contains(@"09163236194")
select line;

foreach (var value in query)
{
MessageBox.Show(value);
}

تست کن. نتیجه رو بده

اینی که شما نوشتید از دستورات linq هست یا ربطی بهش نداره ؟
و اینکه امکان فیلترش کردنش هم هست ، مثلا بگیم اگه شروعش با 123 بود و ..

malizergani
یک شنبه 14 دی 1393, 21:22 عصر
اینی که شما نوشتید از دستورات linq هست یا ربطی بهش نداره ؟
و اینکه امکان فیلترش کردنش هم هست ، مثلا بگیم اگه شروعش با 123 بود و ..

بله این linq است و بی ارتباط نیست، همه جا کاربرد داره:

string file = @"C:\file.txt";

var contex = File.ReadAllLines(file);
var query = from line in contex
// شروع با
where line.StartsWith(@"0916")
// اتمام با
where line.EndsWith(@"6194")
// بین عبارت
where line.Contains(@"323")
// عین عبارت وارد شده
where line == "09163236194"
select line;

foreach (var value in query)
{
MessageBox.Show(value);
}

pouria_bayat
یک شنبه 14 دی 1393, 22:17 عصر
از Regular Expression استفاده کن حتما جواب میگیری.


http://msdn.microsoft.com/en-us/library/ms228595.aspx
http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex%28v=vs.110%29 .aspx
http://msdn.microsoft.com/en-us/library/az24scfc%28v=vs.110%29.aspx