PDA

View Full Version : خواندن رکورد خاصی در یک فایل



kh1387
چهارشنبه 15 آبان 1387, 17:40 عصر
با سلام
چطوری می شه رکورد خاصی رو در یک فایل بخونیم؟
مثلا در یک فایل دارم : ali, hasan حالا می خوام حسن رو بخونم چطوری؟
خواهشا کمکم کنید
متشکرم

alinaghiha
چهارشنبه 15 آبان 1387, 23:36 عصر
اگه منظورتون رو فهميده باشم شما بايد ركوردهاتون را در يك فايل با دسترسي تصادفي ذخيره كنيد
اين كد رو ببين


input = newFileStream("c:\\Student.Rnd", FileMode.Open, FileAccess.Read);
binaryInput = newBinaryReader(input);
int stno = Convert.ToInt32(txt_code.Text);
if (stno > 0 && stno < NUMBER_OF_REC)
{
input.Seek((stno - 1) * student.Size, 0);
record.CODE = binaryInput.ReadInt32();
record.St_Name = binaryInput.ReadString();
record.Grade = binaryInput.ReadDouble();
txt_name.Text = record.St_Name;
txt_grade.Text = record.Grade.ToString();

}
else
MessageBox.Show("Invalid stNo");
input.Close();


منظور از student.Size يك خصوصيتيه كه اندازه كلاس يا ركوردت رو به بايت بر مي گردونه

اگر فيلد مورد جستجوي شما عدده كه مي تونيد كد گذاري كنيد و مثل اين شماره دانش آموزي ازش استفاده كنيد
اما اگه كاراكتر باشه بايد دونه به دونه از اول بخونيد و با فيلدتون چك كنيد كه همون ترتيبي ميشه
البته مي توني الگوريتمي بنويسي كه به هر حرف يه كد بده و از اون كدها يه عددي بدست بياري كه تا حدودي منحصر بفرد باشه كه هم حجم فايلو ميبره بالا و هم كد گذاري و كد گشاييش زمانبر ميشه نمي ارزه

kh1387
پنج شنبه 16 آبان 1387, 16:21 عصر
دوست عزیزم مرسی از راهنمایی تون
اما این کد شما کد آقای جعفر نژاده من یه کد ساده تر می خوام و این رو می دونم.
لطفا راهنمایی کنید

h.jaza
پنج شنبه 16 آبان 1387, 20:34 عصر
می تونی از توابع StreamReader و StreamWriter استفاده بکنی.

کار باهاشون ساده تره و البته محدودیت خاص خودشون رو هم داره.

kh1387
جمعه 17 آبان 1387, 10:05 صبح
می تونی از توابع StreamReader و StreamWriter استفاده بکنی.

کار باهاشون ساده تره و البته محدودیت خاص خودشون رو هم داره.

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

h.jaza
جمعه 17 آبان 1387, 10:35 صبح
اگر خودت یکم سعی می کردی، به احتمال زیاد روش کار رو می تونستی پیدا کنی.
اما:
شما می تونی از یکی از چهار تا متد Read، ReadBlock، ReadLine و یا ReadToEnd کار کنی.

مثلا می تونی با Read یه کاراکتر رو (نه البته خاص) بخونی، به صورت ترتیبی از فایل و یا در اور لود دیگری ازش یه تعداد خاص رو بخونی.

با ReadBlock یه بلوک رو می خونی.

با ReadLine یه خط رو می خونی.

و با ReadToEnd هم، همه ی متن رو می خونی و توی یه استرینگ میریزه.

شاید راحت ترین کار این باشه که ReadToEnd بکنی بعد با اون رشته ی حاصل، هر کاری که دلت خاصت بکنی.

kh1387
جمعه 17 آبان 1387, 21:44 عصر
متشکرم
اما مسئله ای که وجود داره مثلا در فایلم در یک سطر نوشته :
ali hasan
حالا نمی تونم حسن رو بخونم
راه حلش چیه؟

h.jaza
جمعه 17 آبان 1387, 22:38 عصر
گفتم در کار با StreamReader دسترسی مثل Stream و BinaryRead نیست.

راحت ترین کار و شاید بهترین کار اینکه که شما با متد ReadToEnd تا آخر متن رو توی یه رشته بریزی و بعد دیگه از توابع قدرتمند string استفاده بکنی و هر کاری که دلت می خواد انجام بدی.

Amir Oveisi
شنبه 18 آبان 1387, 10:23 صبح
میتونین از Serialization استفاده کنید. با این روش میتونین اطلاعاتتون رو بصورت یک شی از یک کلاس داخل فایل ذخیره کرده و دوباره بصورت یک شی از فایل بخونین.

kh1387
شنبه 18 آبان 1387, 11:40 صبح
میتونین از Serialization استفاده کنید. با این روش میتونین اطلاعاتتون رو بصورت یک شی از یک کلاس داخل فایل ذخیره کرده و دوباره بصورت یک شی از فایل بخونین.

میشه در مورد Serialization توضیحی بدید؟
تشکر


گفتم در کار با StreamReader دسترسی مثل Stream و BinaryRead نیست.

راحت ترین کار و شاید بهترین کار اینکه که شما با متد ReadToEnd تا آخر متن رو توی یه رشته بریزی و بعد دیگه از توابع قدرتمند string استفاده بکنی و هر کاری که دلت می خواد انجام بدی.

اگه ممکنه شیوه کار رو بگید چون اینهایی که فرمودید خودمم می دونم.
البته بازهم متشکرم از مهرتون:قلب:

kh1387
شنبه 18 آبان 1387, 11:42 صبح
البته یک مسئله دیگه هم هست و اون اینکه اگه در فایلی 1000 تا تاریخ ثبت شده باشه و ما مثلا بخواهیم تاریخ ها رو چک کنیم شیوه کار چطوریه؟

Amir Oveisi
یک شنبه 19 آبان 1387, 09:13 صبح
البته بستگی به نوع کارتون با فایل داره. اگر تعداد داده هاتون زیاده من توصیه میکنم که از دیتابیس استفاده کنید چون که فایل برای داده های زیاد جواب نمیده و راندمان کار میاد بایین.

kh1387
سه شنبه 21 آبان 1387, 20:22 عصر
البته بستگی به نوع کارتون با فایل داره. اگر تعداد داده هاتون زیاده من توصیه میکنم که از دیتابیس استفاده کنید چون که فایل برای داده های زیاد جواب نمیده و راندمان کار میاد بایین.

متشکرم
اما من مثالی زدم و نیاز ندارم اینقدر رکورد ذخیره کنم.

h.jaza
چهارشنبه 22 آبان 1387, 11:56 صبح
اگه ممکنه شیوه کار رو بگید چون اینهایی که فرمودید خودمم می دونم.
البته بازهم متشکرم از مهرتون:قلب:
مثلا:



System.IO.StreamReader sr = new System.IO.StreamReader("Your File Path");
//First Read All The File And Copied It To A String
string Text = sr.ReadToEnd();
//Now, Find "hasan" Place In The Text
int hasanIndex = Text.IndexOf("hasan");
//Here, Split The Text By Space For Do Some Thing
string[] SplitedText = Text.Split(' ');
//And Now From The Beginning Of The File, Read A Single Line And Insert It Into The Text
Text = sr.ReadLine();
//By This, Find "hasan" Place Just In The First Line Of The File
hasanIndex = Text.IndexOf("hasan");
//And Finally Close The Reader Stream
sr.Close();
//After Doing Changes, Save It Again To The File
System.IO.StreamWriter sw = new System.IO.StreamWriter("Your File Path");
sw.Write(Text);
sw.Close();