کار با فایلها در ویژوال بیسیک

بازدید235kپست ها4آخرین فعالیت11 سال پیش
0
0

سلام
درسته ویژوال بیسیک 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 استفاده بشه محال هستش كه دو فايل با يك شماره باز بشن.

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

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

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


در گروه برنامه نویسی عضو بشید https://t.me/irdevs_chat

دوره های رایگان آموزش برنامه نویسی

دوره رایگان آموزش جاوا اسکریپت

دوره رایگان آموزش php

دوره رایگان آموزش html

آخرین ویرایش: 09-11-2020 ???? 11:54، توسط رضا رمضانپور
0

فايل ها در 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 به صورت تصادفي خواند.
معمولاً براي نوشتن (ثبت ركورد) از اين حالت استفاده مي شه.

0

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

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

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

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

Line Input #FileNumber , InputString

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

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

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 اونا رو بريزم:

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 با كاما (,) از هم جدا ميشن و درون دوتا دبل كوتيشن (" ") و مقادير تاريخ و منطقي درون دوتا علامت شارپ (#) قرار ميگيرن.

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

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

0

جهت كار با فايل تصادفي بايد ما طول ركورد و شماره ركورد فايل مورد نظر را بدونيم در غير اينصورت ما نمي تونيم فايل رو پردازش كينم به دليل اينكه برنامه با اين فرمول مي تونه ابتداي يك ركورد رو حدس بزنه:
طول ركورد * شماره ركورد

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

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

Get #FileNumber , RecordNumber,InputString

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

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

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 نوشته ميشه.

0

خیلی ممنونم داداش
عالی بود :wubsmiley:

سوال برنامه نویسی دارید؟

ندونستن عیب نیست، نپرسیدن چرا!

خوش آمدید

برای طرح سوال، ایجاد بحث و فعالیت در سایت نیاز است ابتدا وارد حساب کاربری خود شوید. در صورتی که هنوز عضو سایت نیستید میتوانید در عرض تنها چند ثانیه ثبت نام کنید.