برای اینکه موضوع را بهتر متوجه شوید یک مثال عملی برای ذخیره کردن فایل می نویسیم.پس یک پروژه جدید ایجاد کرده و یک Command Button روی آن قرار دهید
و روی آن دوبار کلیک کنید تا به پنجره کد نویسی وارد شوید.و قطعه کد زیر را بنویسید:
Private Sub Command1_Click ()
Open "C:TestFile.txt" For Output As #1
Print #1, Text1.Text
Close #1
End Sub
همانطور که در قطعه کد بالا توجه می کنید ما ابتدا یک فایل با نام TestFile.txt برای ذخیره کردن محتویات TextBox باز کردیم(Output) با شماره فایل 1# )از این شماره فایل برای نوشتن در فایل استفاده میشود) سپس از دستور Print # استفاده کردیم.همانطور که توجه میکنید شماره فایلی که در ابتدا باز کرده بودیم در این خط از آن استفاده کردیم و در آخر هم فایل شماره 1 را بستیم.
توجه کنید که اگر شماره فایل را قید نکنید کلیه فایلهای باز بسته خواهند شد.
خواندن محتویات فایل ترتیبی
بعد از اینکه فایل را ذخیره کردیم باید به طریقی محتویات آن را بازیابی کنیم برای این منظور از دستور Input به جای Output استفاده می کنیم.
Private Sub Command1_Click()
Dim strInput As String
Open "C:TestFile.txt" For Input As #1
Input #1, strInput
Close #1
Text1.Text = strInput
End Sub
در قطعه کد قبل برای خواندن محتویات فایل ما ابتدا فایل مورد نظر را باز میکنیم(Input) سپس از دستور Input برای خواندن محتویات فایل استفاده میکنیم بعد از آن باید محتویات فایل درون یک متغییر ریخته شود(strInput).بعد از اینکه محتویات فایل درون متغییر ریخته شد فایل را می بندیم و سپس Text1.Text را برابر متغییر strInput قرار میدهیم.توجه کنید اگر خواستید به انتهای فایل ترتیبی مقدار های دیگری اضافه کنید از دستور Output استفاده نکنید چون این کار باعث میشود که محتویات قبلی از بین بروند و محتویات جدید جایگزین شوند برای اینکه محتویات قبلی از بین نروند و محتویات جدید اضافه شود از دستور Append به جای دستور Output استفاده کنید.
حالا اگر بخواهیم به عنوان مثال نام و نام خانوادگی و آدرس را ذخیره کنید باید چه کار کرد؟ خیلی ساده است برای ذخیره کردن چند فیلد در فایل های ترتیبی تنها کاری که باید بکنید این است که هر چند تا که فیلد دارید پشت سر هم و به وسیله کاما (,) از هم جدا کنید و از دستور Write به جای دستور Print استفاده بکنید.به مثال زیر که نام و نام خانوادگی و آدرس را ذخیره میکند توجه کنید:
Private Sub Command1_Click()
Open "C:TestFile.txt" For Output As #1
Write #1, txtName.Text , txtLastName.Text , txtAddress.Text
Close #1
End Sub
برای خواندن هم به همان ترتیبی که فیلد ها را ذخیره کردیم به همان ترتیب هم می خوانیم به قطعه کد زیر توجه کنید:
Private Sub Command1_Click()
Dim strName As String
Dim strLastName As String
Dim strAddress As String
Open "C:TestFile.txt" For Input As #1
Input #1, strName, strLastName, strAddress
Close #1
txtName.Text = strName
txtLastName.Text = strLastName
txtAddress.Text = strAddress
End Sub
فایل های تصادفی
بعد از فایل های ترتیبی که توضیح دادیم نوبت به فایل های تصادفی می رسد.از فایل های تصادفی بیشتر از فایل های ترتیبی استفاده می شود چون سرعت دسترسی به فایل های تصادفی به مراتب بیشتر از فایل های ترتیبی است.اگر به عنوان مثال در یک لیست که نام افراد و شماره تلفن آنها ذخیره شده باشد و شما بخواهید که به شخص نفر 156 دسترسی داشته باشید سریعا می توانید به شخص نفر 156 دسترسی داشته باشید حالا اگر این فایل ترتیبی بود شما باید اول 155 نفر اول را رد می کردید و سپس نفر 156 را پیدا می کردید.کار فایل تصادفی بدین صورت است که شما با شماره رکورد(Record Number) کار می کنید و برای خواندن و نوشتن از دستورات Get و Put استفاده می کنیم.
باز کردن فایل تصادفی
برای باز کردن فایل تصادفی مانند دستور زیر عمل می کنیم:
Private Sub Command1_Click()
Open "C:RandomFile.txt" For Random As #1
End Sub
دستور Put
بعد از اینکه فایل را باز کردید برای نوشتن در فایل های تصادفی از دستور زیر استفاده می کنیم:
Private Sub Command1_Click ()
Open "C:RandomFile.txt" For Random As #1
Put #1, 1, Text1.Text
Close #1
End Sub
همانطور که در خط 3 ملاحظه می کنید از دستور Put برای ذخیره کردن استفاده کردیم
بعد از اینکه دستور Put #1 را نوشتیم بعد از آن شماره رکوردی که میخواهیم محتویات Text1.Text در آن ذخیره شود نوشتیم.بعدا ما به وسیله شماره رکورد میتوانیم سریعا به محتویات آن دسترسی داشته باشیم.
دستور Get
برای اینکه بتوانیم محتویات فایل تصادفی را بخوانیم از دستور Get استفاده میکنیم:
Private Sub Command1_Click()
Dim strFile As String
Open "C:RandomFile.txt" For Random As #1
Get #1, 1, strFile
Close #1
Text1.Text = strFile
End Sub
داده تعریف شده توسط کاربر(User Define Type)
فرض کنید شما میخواهید برنامه ای بنویسید که در آن نام و نام خانوادگی و نمره انضباط در فایل تصادفی ذخیره شود.برای این کار باید که نوع جدید به وجود بیاورید که تشکیل شده از نام و نام خانوادگی و نمره انضباط و سپس کل این اطلاعات را در فایل ذخیره کنید.
برای اینکه یک نوع جدید ایجاد کنید از کلمه کلیدی Type استفاده می کنیم.برای اینکار یک پروژه جدید ویژوال بیسیک ایجاد کنید و در قسمت General قطعه کد زیر را بنویسید:
Type MyType
fName As String * 15
LastName As String * 25
Value As Byte
End Type
همانطور که ملاحظه می کنید یک نوع جدید با نام MyType با فیلد های fName و LastName و Value(نمره انضباظ( ایجاد کردیم و آخر آن را با دستور End Type بستیم.اگر دقت کرده باشید آخر تعریف fName وLastName عدد به کار بردیم.این اعداد به خاطر این نوشته شده اند که مشخص کنند که طول فیلد ما باید به چه مقدار باشد به عنوان مثال برای فیلد LastName حداکثر 25 کارکتر می توان ذخیره کرد و بیشتر از آن با پیغام خطا مواجه می شوید.
بعد از اینکه نوع جدید(MyType) را ایجاد کردید باید بتوانیم از آن استفاده کنیم برای این منظور در همان قسمت General بعد از تعریف نوع جدید همانند تعریف متغییر عمل میکنیم(البته توجه کنید که Type ما متغییر نیست بلکه یک نوع جدید است(:
Type MyType
fName As String * 15
LastName As String * 25
Value As Byte
End Type
Private Student As MyType
برای اینکه موضوع را بهتر متوجه شوید دو قطعه کد می نویسیم یکی برای نوشتن به وسیله نوع جدید و دیگری برای خواندن نوع جدید.
قطعه کد زیر طریقه نوشتن در فایل تصادفی به وسیله نوع جدید(user define type)
را نشان میدهد:
Private Sub Command1_Click()
Dim Student As MyType
Open "C:UserDefin.txt" For Random As #1 Len = Len(Student)
With Student
.fName = txtname.Text
.LastName = txtLastName.Text
.Value = txtValue.Text
End With
Put #1, 1, Student
Close #1
End Sub
در کد بالا از دستور Len برای اینکه مشخص کنیم که طول نوع جدید چقدر هست استفاده کردیم.
قطعه کد زیر طریقه خواندن از فایل تصادفی به وسیله نوع جدید را نشان می دهد:
Private Sub Command1_Click ()
Dim Student As MyType
Open "C:UserDefin.txt" For Random As #1 Len = Len(Student)
Get #1, 1, Student
Close #1
With Student
txtname.Text = .fName
txtLastName.Text = .LastName
txtValue.Text = .Value
End With
End Sub