PDA

View Full Version : سوال: سرچ و ویرایش در فایل باینری



a.maleki
چهارشنبه 06 آذر 1387, 18:02 عصر
سلام دوستان
من یک سری کد نوشتم برای کار با فایلهای باینری (ذخیره و سرچ ) حالا می خواهم بدونم که اصلا میشه یک رکوردی که در فایلهای بابینری ذخیره شد را ویرایش کرد مثلا فیلد های ما شامل نام و نام خانوادگی و سال تولد هست حالا بعد از ذخیره کردن ما یکی از فیلدهای رکوردمونو می خواهیم ویرایش کنیم چطوری میشه این کار رو کرد



Structure info
Dim fname As String
Dim lname As String
Dim id As Integer
Dim bdate As Integer
End Structure

کد ذخیره کردن

Dim myfile As New FileStream("c:\file.dat", FileMode.Append)
Dim mywrite As BinaryWriter = New BinaryWriter(myfile)
student.fname = TextBox1.Text
student.lname = TextBox2.Text
student.id = TextBox3.Text
student.bdate = TextBox4.Text

mywrite.Write(student.fname)
mywrite.Write(student.lname)
mywrite.Write(student.bdate)
mywrite.Write(student.id)





کد جستجو کردن

Dim myfile As New FileStream("c:\file.dat", FileMode.OpenOrCreate, FileAccess.Read)
Dim myread As New BinaryReader(myfile)

Do While (myread.PeekChar > -1)
TextBox1.Text = myread.ReadString
TextBox2.Text = myread.ReadString
TextBox4.Text = myread.ReadInt32
TextBox3.Text = myread.ReadInt32
MsgBox("رکورد بعدی")
Loop
myfile.Close()


اگر دوستان کد مناسبتری جهت جستجو کردن بلد هستند بگن کلی ممون میشم همچنین کدی برای حذف رکورد و ویرایش رکورد در فایل باینری

a.maleki
جمعه 08 آذر 1387, 19:27 عصر
آقایون و خانمها یعنی کسی هیچ اطلاعاتی نداره که بگه ؟؟؟؟؟:متفکر::متفکر:

rooshan2008
شنبه 09 آذر 1387, 00:16 صبح
سلام به دوست عزیز
البته روشی که من می گم برای رکورد با طول ثابت هست.
با این روش درج کنی فکر می کنم بهتره:
تعریفات :
Dim CurentRecord As Integer

با فر ض ابن ک هرکورد ما :


Private Structure Info
Dim R As String
Dim b As Integer
End Structure
Dim R As Info


باز کردن فایل:


FileOpen(1, "c:\roshan.txt", OpenMode.Binary, OpenAccess.ReadWrite, OpenShare.Shared)

تعداد کل رکورد ها:
Private ReadOnly Property RecordCount() As Integer
Get
Dim Flen = FileLen("c:\roshan.txt")
Return (Flen / Len(R))
End Get
End Property

درج رکورد:


R.b = TextBox1.Text
R.R = TextBox2.Text
FilePut(1, R)


حرکت به سمت جلو (روی رکورد ها):


CurentRecord += IIf(CurentRecord = 0, 1, Len(R) - 1)
FileGet(1, R, CurentRecord)
TextBox1.Text = R.b
TextBox2.Text = R.R

حرکت به عقب و....لطف کنین خودتون درست کنید:چشمک:

ویرایش رکورد مورد نظر:
البته وقتی میتونید رکورد رو ویرایش کنید که با حرکت بر روی رکورد روی رکورد مورد نظر قرار بگیرین و اون وقت ویرایشش کنید.


R.b = TextBox1.Text
R.R = TextBox2.Text
FilePut(1, R, (CurentRecord))


بستن فایا و ذخیره تغییرات:


FileClose(1)


شما بر طبق توضیحات خودتون می تونید یک جستجو ایجاد کنید و بعد به همین ترتیب رکورد رو ویرایش کنید
باز هم تاکید می کنم این روش برای رکورد با طول ثابت هست مثلاً شما یک رکورد با طول 10 ایجاد کنید و درصورتی که در ویرایش اطلاعات طول اون رو تغییر بدید نتیجه غیر منتظره در یافت خواهید کرد.(طول فقط برای یک بار قابل تنظیم می باشد.در اولین رکورد)
البته شاید اساتید نظر دیگه ای داشته باشند.

موفق باشی

a.maleki
یک شنبه 10 آذر 1387, 15:18 عصر
دوست عزیز میشه در مورد کدهاتون بیشتر توضیح بدید ممنون میشم

a.maleki
دوشنبه 11 آذر 1387, 17:32 عصر
عزیزان کسی چیزی نداره بگه ممنون میشم