کار با فایل ها در پاوربیسیک (قسمت دوم)
================================================
آموزش کار با فایل های ترتیبی
---------------------------------
نوشتن در فایل های ترتیبی:
فایلهای ترتیبی فایل هایی هستند که معمولا اطلاعات به صورت مرتب شده و پشت سر هم نوشته می شود
می توانید در پست قبلی یادبگیرید که چگونه یک فایل ترتیبی بسازید
برای کار با این نوع فایل ها باید ابتدا آن فایل را ساخته یا باز کنید(در قسمت قبل آموزش داده شد)
توابع و زیرروال های معمول در نوشتن در فایل های ترتیبی :
نقل قول: ٌWrite
Print
Write :
طرز استفاده :
کد:
Write#عبارت2,عبارت1,شماره فایل
مثال :
کد:
Write#1,"PowerBASIC Is a Powerful Compiler"
شماره فایل ،عددی است که هنگام باز کردن یا ساختن فایل تعیین کرده اید
عبارت 1 و 2 و... اطلاعاتی است که می خواهید به ترتیب 1 به آخر در فایل نوشته شود
که تقریبا عبارت اول اجباری و بقیه اختیاری هستند(عبارات می توانند خالی از حروف باشند)
که در صورتی که آنها را از هم جدا نکنید همگی به عنوان یک عبارت به شمار می آید و در فایل
نوشته می شود
نکته :
نقل قول: به جای , در بین عبارات می توانید از ; نیز استفاده کنید(فقط یکی از آنها)
---------------------------------------------------------------------
Print :
این تابع نیز کار تابع Write را می کند اما کمی پیشرفته تر.البته می توان این کارها را
با Write نیز پیاده سازی کرد اما در Print به صورت آماده وجود دارد
طرز استفاده را بهتر است انگلیسی بگذاریم تا درک آن راحتتر شود :
کد:
PRINT # fNum&, [ExpList] [SPC(n)] [TAB(n)]
مثال :
fnum شماره فایل ، Explist اطلاعاتی است که باید در فایل نوشته شود ، SPC به تعداد n فضای خالی
ایجاد می کند و Tab به تعداد n تب می زند
نقل قول: Tab و SFC اختیاری اند
وجود حداقل یک عبارت در Print اجباری است حتی یک عبارت خالی = ""
در اینجا نیز اگر بخواهید چندین عبارت را پشت سر هم تایپ کنید باید از , یا ; استفاده کنید
که این دو هر کدام تفوات هایی دارند :
نقل قول: اگر از , استفاده کنید بین عبارات فاصله خالی زیادی بوجود می آید و باعث هدر رفتن فضای دیسک
می شود
اما اگر از ; استفاده کنید بین عبارات تنها فاصله ای جزیی وجود دارد
این تابع نوع دیگری نیز تعریف می شود :
کد:
PRINT # fNum&, array$()
یعنی شما می توانید آرایه ای رشته ای را با این تابع در یک فایل بنویسید
توضیح :
fnum شماره فایل و array$() نام آرایه است
----------------------------------------------------------------------------------
خواندن از فایل های ترتیبی :
توابع معمول در خواندن از فایل های ترتیبی :
نقل قول: Input
Line Input
----------------------------------------------------
Input :
با این تابع می توانید اطلاعات را با روشی که با توابع Write یا Print در فایل نوشته اید را بخوانید
طرز استفاده :
کد:
Input#متغیر2,متغیر1,شماره فایل
اطلاعات خوانده شده در متغیرها ذخیره می شود که متغیر اول اجباری و بقیه متغیر ها اختیاری و در صورت
نیاز تعریف می شوند
برای مثال اگر با تابع Write اعداد 1 و2 را در فایلی نوشتید می توانید آنها را به صورت زیر
استخراج کنید :
----------------------------------------------------------
Line Input :
این تابع برای خواندن خط به خط از درون یک فایل استفاده می شود :
کد:
LINE INPUT #filenum&, string_variable
String_Variable همان متغیر برای ذخیره کردن خط خوانده شده است
این تابع به صورت زیر نیز تعریف می شود :
کد:
LINE INPUT #filenum&, Arr$() [RECORDS rcds] [TO count]
این نوع بیشتر برای کار با آرایه ها به کار می رود;مثلا ما یک آرایه را در فایل می نویسیم
حال می خواهیم آنرا باز یابی کنیم
Arr$() آرایه رشته ای برای ذخیره اطلاعات بدست آمده است
نقل قول: در پرانتز باید اندیس را تعیین تا اطلاعات در آن ذخیره شود
در صورتی که برای ذخیره اطلاعات از CRLF$ استفاده کرده باشید،در حقیقت اطلاعات را به صورت
رکورد نوشته باشید می توانید شماره رکورد مورد نطر را به جای rcds در RECORDS rcds قرار دهید تا از
آن خوانده شود(این قسمت اختیاری است)
اگر می خواهید تعداد مشخصی خط را بخوانید مثلا 5 خط می توانید تعداد خطها را به جای
Count در To Count بگذارید (این قسمت نیر اختیاری است)
نقل قول: این تابع بیشتر موقعی کاربرد دارد که اطلاعات را با Print در فایل نوشته باشیم
------------------------------------------------------------------------
بستن فایل باز شده :
اگر فایلی را بازکنید پس از انجام کارهای خود باید آن را ببندید زیرا در غیر این صورت با مشکلاتی مواجه
خواهید شد ، مثلا در جاهای دیگر نمی توانید آن را دوباره باز و عملیاتهایی را روی آن انجام دهید
نکته :
نقل قول: در صورتی که از Close خالی استفاده کنید،همه فایلهای باز را می بندد
می توانید چندین فایل را با یک دستور Close ببندید :
کد:
Close#شماره فایل2,شماره فایل1 , ...
=================================================
یک مثال ساده و آموزنده :
کد:
#COMPILE EXE
DECLARE FUNCTION ReadData() AS STRING
'=================Main Function======================
FUNCTION PBMAIN() AS LONG
CALL WriteData()
DIM GetData AS STRING
GetData=ReadData()
MSGBOX GetData
END FUNCTION
'====================================================
'=================Write Data=========================
SUB WriteData()
OPEN "C:\Test.txt" FOR OUTPUT AS 1
WRITE#1,"This Is a Test File"
CLOSE #1
END SUB
'=====================================================
FUNCTION ReadData() AS STRING
DIM GetText AS STRING
OPEN "C:\Test.txt" FOR INPUT AS 1
INPUT#1,GetText
CLOSE #1
FUNCTION=GetText
END FUNCTION