کار با فایلها در ویژوال بیسیک
#1
Note 
سلام
درسته ویژوال بیسیک 6 دیگه خیلی قدیمی شده و کم کم داره فراموش میشه اما هنوز طرفداری خودش رو داره و تو سیستم اموزشی هنوز ویژوال بیسیک6 تدریس میشه ما هم گفتیم یه اموزشی بذاریم :57:
__________________________________________________
منبع مطلب barnamenevis.org

مفهوم فايل - File :

در ابتدا سيستم ذخيره و بازيابي بانك اطلاعاتي توسط سيستم فايلينگ انجام مي شد.
يعني داده هايي كه درون فيلدها به صورت ركورد ذخيره شده بود به صورت يك فايل متني ذخيره مي شد.(بعداً فايل دودويي بوجود مياد) يعني هر ركوردي درون يك فايل ذخيره مي شد. اين نوع ذخيره سازي باعث به وجود اومدن Redundancy (بروز افزونگي) در سيستم فايل مي شد. مثلاً در يك ركوردي اگر فيلدي Computer Software مقدارش بود و در ركورد ديگري همان فيلد مقدار Computer Sftware Engeening وجود داشت باعث بوجود اومدن يك افزونگي در نحوه بازيابي(جستجو يا بازكردن) فايل مي شد. كه بعد ها پايگاه داده رابطه اي بوسيله ادگارد فرانك كاد با نمونه برداري از مجموعه ها در رياضي ساخته شد.

فايل:

مجموعه ركورد هايي هستن كه در كنار هم يك فايل رو تشكيل مي دن.

مراحل دسترسي به فايل:



در كار با فايل بايد 5 تا مرحله رو انجام بديم:

تعريف متغيري به عنوان اشاره گر به فايل (در پاسكال)
ايجاد ارتباط بين اشاره گر مورد نظر و فايل فيزيكي در حافظه جانبي(هارد، فلش، فلاپي و ...)
باز كردن فايل
پردازش فايل
بستن فايل

گزينه اول در پاسكال هستش كه براي دسترسي به فايل متني، نوع دار و بدون نوع به صورت زير تعريف مشه:

کد:
Var FP : Text ;
Var FP Fileof Longint;
Var FP File;


اما ما در Visual Basic همچين چيزي رو نداريم.

ما براي دسترسي به فايل به دو چيز نياز داريم:

- آدرس فايل
- موقعيت فايل

آدرس فايل: آدرس(Path) دقيقي هستش كه ما بايد به برنامه بديم تا اون فايل رو از حافظه جانبي پيدا كنه و موقعيتش رو بدست بياره.

موقعيت فايل: شماره اي هستش كه توسط تابع ()FreeFile پيدا ميشه. از اين تابع مي شه به دو صورت استفاده كرد:

استفاده از يك متغير از نوع Integer
استفاده از FreeFile در دستور

كه هيچ فرقي با هم نمي كنن چون هر فايلي شماره مخصوص خودش رو داره و اگر از تابع FreeFile استفاده بشه محال هستش كه دو فايل با يك شماره باز بشن.



بازكردن، پردازش و بستن:

پردازش: يعني عمليات خواندن و نوشتن (اطلاعات جديد، ويرايش اطلاعات قبلي، افزودن) در يك فايل.

براي اينكه يك فايل پردازش بشه بايد اون فايل باز بشه يعني اطلاعات اون خونده بشه بعد پردازش بشه و بعد حتماً بايد بسته بشه.
نكته: هر فايلي كه باز ميشه حتماً بايد بسته بشه چون ممكنه اطلاعات درونش آسيب ببينن.

آخرین ویرایش: 21-04-2013 ساعت 11:14، توسط THE KNIGHT
چطور امضا کنم؟  Huh
پاسخ
#2
Note 
فايل ها در Visual Basic دو دسته هستن:

- ترتيبي Sequintial File
- تصادفي Random File

كه ما با اين دو نوع فايل سروكار داريم.
يك نوع فايل به اسم Binary(فايل دودويي) داريم كه جزء فايل هاي تصادفي محسوب ميشه.

براي باز كردن يك فايل و انجام عمليات روي فايل بايد از يكي از 5 حالتي كه Visual Basic در اختيار ما قرار داده استفاده كنيم:

Input: باز كردن يك فايل ترتيبي جهت خواندن. اشاره گر در ابتداي فايل قرار ميگيره.

Output: باز كردن يك فايل ترتيبي جهت نوشتن. اگر فايل وجود نداشته اون رو ايجاد مي كنه. اشاره گر در ابتداي فايل قرار ميگيره. (حذف اطلاعات قبلي و از نو نوشتن)

Append: باز كردن يك فايل ترتيبي جهت نوشتن. اگر فايل وجود نداشته باشه اون رو در مسير مورد نظر ايجاد مي كنه و شاره گر در انتهاي فايل قرار ميگيره. (بدون حذف اطلاعات قبلي)

Random: باز كردن يك فايل تصادفي. اگر فايل وجود نداشته باشه ايجاد ميش. اشاره گر در ركوردي كه مي خواهيم اطلاعات نوشته بشن قرار ميگيره. زماني استفاده ميش كه بخواهيم يك ركورد رو در جايي معين از فايل ذخيره كنيم (بدون حذف اطلاعات قبلي)

Binary: باز كردن فايل دودويي. در صورت عدم وجود فايل اون رو ايجاد مي كنه.

نكته 1: در تمامي اين حالات فايل اگر وجود نداشته باشه به صورت خودكار در مسير مورد نظر ايجاد ميشه به غير از حالت Input!
نكته 2: از Random برا باز كردن يك فايل ترتيبي ميشه استفاده كرد.( اصلاً براي همين ايجاد شده بدليل كندي فايل ترتيبي)


باز كردن فايل ترتيبي و تصادفي - دستور Open:

شكل كلي دستور:
کد:
Open [FilePath]  For [Mode] Access [AccessType]  As [FileNumber] Len = [Width]


Open: كلمه كليدي جهت باز كردن فايل
FilePath: آدرس دقيق فايل (با پسوند) كه اشاره گر جهت پيدا كردن موقعيت فايل به آدرس فايل ميره.
For: كلمه كليدي
Mode: حالات دسترسي به فايل
Access: كلمه كليدي


AccessType: نوع دسترسي به فايل با مشخصات زير:

Shared: در شبكه كاربران مي توانند همزمان يك فايل رو باز كنند.
Lock Read: كاربر فايل رو فقط مي تونه بخونه
Lock Write: كاربر اجازه ويرايش يا تغييرات رو در فايل دارند.
Lock Read Write: كاربر مي تونه فايل رو بخونه بنويسه

AS: كلمه كليدي
FileNumber: شماره فايل كه بوسيله تابع ()FreeFile بدست مياد ( توضيحات:مفهوم فايل - File)
Len: كلمه كليدي
Width: طول يك ركورد از فايل رو تعيين مي كنه.
به هر سطر در فايل ركورد مي گن.

باز كردن يك فايل ترتيبي جهت خواندن:
کد:
Open "C:\Student.txt" For Input As #FreeFile Len = 7


اين فايل قبلاً در مسير "C:\Student.txt" وجود داشته در غير اينصورت پيغام خطا صادر ميشه و يك ركورد به طول 7 رو مي خونه.
باز كردن يك فايل ترتيبي جهت نوشتن (پاك شدن اطلاعات قبلي):
کد:
Open "C:\Student.txt" For Output As #FreeFile Len = 7


اگر فايلي با اين نام از قبل بوده اطلاعاتش رو پاك مي كنه و اشاره گر رو در ابتداي فايل نگه مي داره و اجازه نوشتن يك ركوردي به طول 7 رو صادر مي كنه.
باز كردن يك فايل ترتيبي جهت نوشتن (بدون پاك شدن اطلاعات قبلي):
کد:
FileNumber = FreeFile
Open "C:\Student.txt" For Append As #FileNumber Len = 7
Print #FileNumber, "Obalit"
Close #FileNumber


من در اينجا يك متغير FileNumber از نوع Integer تعريف كردم و مقدارش رو برابر تابع ()FreeFile قرار دادم.
فايل Student.txt رو باز مي كنه و بدون اينكه اطلاعات قبلي اون رو پاك كنه اون رو باز مي كنه و اجازه نوشتن ركوردي به طول 7 رو صادر مي كنه و بوسيله دستور Print درون فايل كلمه Obalit رو مي نويسه. و در انتها بوسيله دستور Close فايل رو ميبنده.

باز كردن يك فايل تصادفي:

براي باز كردن يك فايل تصادفي بايد حالات دسترسي به فايل به صورت Random باشه. فايل تصادفي زماني به د مي خوره كه دسترسي ما به فايل به صورت مستقيم باشه يعني بوسيله آدرس دقيق فايل (آدرس + ركورد مورد نظر) ما بخواهيم يه فايل رو باز كنيم.
کد:
Open "C:\Student.txt" For Random As #FreeFile Len = RecordWidth


بوسيله اين دستور ميشه اطلاعات فايل tudent.txt به صورت تصادفي خواند.
معمولاً براي نوشتن (ثبت ركورد) از اين حالت استفاده مي شه.

چطور امضا کنم؟  Huh
پاسخ
#3
Note 
هر فايلي كه باز ميشه براي پردازش اون دو حالت وجود داره:

يا براي خوندن اطلاعاتش باز شده
يا براي نوشتن اطلاعات جديد باز شده

اطلاعات = ركورد

خواندن فايل:
براي خواندن فايل بايد حالت دسترسي به فايل Input باشه تا بشه اطلاعاتش رو خوند. دستوري كه ميشه باهاش اطلاعاتش رو خوند دستور Line Input هستش.
شكل كلي اين دستور:
کد:
Line Input #FileNumber , InputString


Line Input: كلمه كليدي جهت خواندن فايل
FileNumbe: شماره فايل
InputString: رشته اي هستش كه قراره خونده بشه.
چون فايل ما ترتيبي هستش نميشه به يك ركورد خاصي اشاره كرد اگر فايل 500 ركورد داشت و ما بخواهيم به ركورد 239 بريم بايد 500 ركورد رو خوند پس براي خوندن اطلاعات يك ركورد تمامي ركورد ها بايد خونده بشن. عيب اين نوع فايل سنگيني و كندي اون هستش كه علتش همين هستش.

حالا من مي خوام اطلاعات فايل Student.txt رو بخونم و در يه متغير به اسم strInput قرار بدم و سپس در يك TextBox اونا رو بريزم:

کد php:
Dim strInput As String
 Dim FileNumber 
As Integer
  FileNumber 
FreeFile
  Open 
"C:\Student.txt" For Input As #FileNumber
    
Do While Not EOF(FileNumber)
     
Line Input #FileNumber, strInput
    
Loop
  Close 
#FileNumber
   
PassageTxt.Text strInput 


نوشتن فايل:

براي نوشتن فايل دو راه وجود داره:

استفاده از دستور Print
استفاده از دستور Write

دستور Print:
از دستور Print براي نوشتن تويه فايل ترتبي استفاده ميشه.

شكل كلي دستور:

کد:
Print #FileNumber , OutputString


Print: كلمه كليدي جهت نوشتن در فايل ترتيبي
FileNumber: شماره فايل ترتيبي
OutputString: رشته يا عبارتي كه قرار نوشته بشه در فايل ترتيبي
حالا من مي خوام اطلاعات يه TextBox رو در يه متغير به اسم strOutput قرار بدم و سپس در فايل Student.txt اونا رو بريزم:
کد php:
Dim strOutput As String
Dim FileNumber 
As Integer
 FileNumber 
FreeFile
 Open 
"C:\Student.txt" For Output As #FileNumber
  
strOutput PassageTxt.Text
   
Print #FileNumber, strOutput
 
Close #FileNumber 


دستور Write:
از دستور Write هم ميشه براي نوشتن اطلاعات در يك فايل متني هم استفاده كرد و دقيقاً مثل دستور Print هست با يكسري تفاوت كه فيلدها در دستور Write با كاما (,) از هم جدا ميشن و درون دوتا دبل كوتيشن (" ") و مقادير تاريخ و منطقي درون دوتا علامت شارپ (#) قرار ميگيرن.

کد php:
String Value " SoftAfzar.Net "
DateValue #10/3/1387#
Boolean #True# OR #False# 

شكل كلي دستور:
کد:
Write #FileNumber , OutputString


Write: كلمه كليدي جهت نوشتن در فايل ترتيب
FileNumber: شماره فايل ترتيبي
OutputString: ليست خروجي ها كه قراره در فايل ترتيبي نوشته بشن.


بستن فايل ترتيبي - دستور Close


هر فايلي كه باز ميشه حتماً بايد بسته بشه حالا چه بخواد پردازش بشه چه بخواد نشه حتماً بايد بسته بشه.
با استفاده از دستور Close ميشه يك فايل ترتيبي و تصادفي رو بست.

شكل كلي دستور:
کد:
Close #FileNumber

Close: لمه كليدي جهت بستن فايل ترتيبي يا تصادفي
FileNumber: شماره فايل

در برنامه اي ممكن هست كه ما 4 تا 5 تا فايل ترتيي يا تصادفي رو باز كنيم شايد هم در برخي مواقع 20 تا فايل. براي بستن تك تك اين فايل ها شايد معقول به نظر نرسه كه n تا دستور Close نوشت. براي همين اگر بخواهيم تمامي فايل هاي ترتيبي يا تصادفي رو ببنديم از دستور Close به صورت تنها استفاده مي كنيم:

کد:
Close

اون موقع تمام فايل ها بسته مي شن.

چطور امضا کنم؟  Huh
پاسخ
#4
Note 
جهت كار با فايل تصادفي بايد ما طول ركورد و شماره ركورد فايل مورد نظر را بدونيم در غير اينصورت ما نمي تونيم فايل رو پردازش كينم به دليل اينكه برنامه با اين فرمول مي تونه ابتداي يك ركورد رو حدس بزنه:
کد:
طول ركورد * شماره ركورد


دستور Get:
براي خواندن از فايل تصادفي بايد از دستور Get استفاده كنيم.

شكل كلي دستور:

کد:
Get #FileNumber , RecordNumber,InputString

Get: دستور خواندن در فايل تصادفي
FileNumber: شماره فايل تصادفي
RecordNumber: شماره ركورد كه قراره اطلاعات از اونجا خونده بشه.
InputString: متغيري كه قراره اطلاعات درون فايل توش ريخته بشه.

خواندن اطلاعات يك فايل:

کد php:
Open "C:\Student.txt" For Random As #FileNumber Len = 3
For Counter 1 To 3
Get 
#FileNumber, Counter, strInput
Next Counter
Close 
#FileNumber 


دستور Put:
براي نوشتن در يك فايل تصادفي ما از دستور Put استفاده مي كنيم.

شكل كلي دستور:

کد:
Put #FileNumber , RecordNumber , OutputString

Put: دستور جهت نوشتن در فايل به صورت تصادفي
Filenumber: شماره فايل تصادفي
RecordNumber: شماره ركوردي كه قراره توش اطلاعات نوشته بشه
Outputstring: متغير يا رشته اي هستش كه قراره جايه RecordNumber جايگزين بشه.

نوشتن اطلاعات در يك فايل:
کد:
Open "C:\Student.txt" For Random As #FileNumber Len = 15
Put#FileNumber, 3, "Computer Science"
Close #FileNumber
عبارت Computer Science در ركورد شماره 3 نوشته ميشه.

چطور امضا کنم؟  Huh
پاسخ
#5
Note 
خیلی ممنونم داداش
عالی بود :wubsmiley:

پاسخ
ایجاد موضوع جدید   پاسخ به موضوع  

موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
Note دانلود نمونه سولات ویژوال بیسیک SOFTAFZAR 1 2,200 18-12-2015 ساعت 11:30
آخرین ارسال: majidvajih
Note ماشین حساب پیشرفته به زبان ویژوال بیسیک SOFTAFZAR 2 4,120 28-01-2015 ساعت 16:36
آخرین ارسال: xMAN
Note space در ویژوال بیسیک 6 شهره 1 672 04-10-2014 ساعت 10:42
آخرین ارسال: Comodo
Note ویژوال بیسیک amir7519 1 600 19-07-2014 ساعت 17:36
آخرین ارسال: C0der
Note باز و بستن برنامه ها با ویژوال بیسیک Somi 1 589 18-05-2014 ساعت 19:28
آخرین ارسال: VBProgrammer
Note ایجاد لوزی با ویژوال بیسیک 6 Nastaran 2 744 07-04-2014 ساعت 14:25
آخرین ارسال: Nastaran
Note کمک در Sendkey ویژوال بیسیک THE KNIGHT 11 2,108 29-03-2014 ساعت 09:44
آخرین ارسال: Stack OverFlow
Note دانلود مجموعه پروژه ویژوال بیسیک Daniel 0 608 14-03-2014 ساعت 22:37
آخرین ارسال: Daniel
Note تمرینات حل شده درس برنامه سازی(ویژوال بیسیک) Daniel 0 1,005 13-03-2014 ساعت 19:32
آخرین ارسال: Daniel
Note دانلود 105 پروژه ویژوال بیسیک SOFTAFZAR 6 4,383 23-02-2014 ساعت 18:21
آخرین ارسال: Daniel

کاربرانِ درحال بازدید از این موضوع:   1 مهمان