خواندن فایل ها در VBScript

بعد از این که فایل را باز نمودیم، می توانیم محتویات آن را بخوانیم.
برای خواندن یک فایل به یک آبجکت از نوع TextStream احتیاج داریم که حاصل باز کردن فایل است.
برای خواندن یک فایل متد های مختلفی وجود دارد که در زیر به آن ها می پردازیم. همه ی این متد ها متعلق به آبجکت TextStream است.

متد Read

متد Read از آبجکت TextStream ، کار خواندن یک فایل را انجام می دهد. طریقه ی فراخوانی این تابع به این صورت است:

StrWord = objOpenFile.Read(NumberOfCharachters)

متد Read به تعدادی که در آرگومان NumberOfCharachters مشخص شده (که یک عدد صحیح است)، کاراکتر را از فایل می خواند و به عنوان نتیجه، یک رشته به طول NumberOfCharachters را بر میگرداند.

در صورتی که NumberOfCharachters بزرگ تر از تعداد کاراکتر های موجود در فایل باشد، این متد تمام کاراکتر های باقیمانده در فایل را برمی گرداند.
این متد در نهایت اشاره گر فایل را به مکان بعد از آخرین کاراکتری که خوانده منتقل می کند.

نکته:

اشاره گر فایل یک اشاره گر مجازی است که مشخص می کند در هنگام خواندن یا نوشتن فایل، در هر لحظه در چه مکانی قرار داریم. تا ادامه ی خواند یا نوشتن از آن محل انجام گیرد. این اشاره گر توسط سیستم عامل تنظیم می شود.

اگر اشاره گر فایل در انتهای فایل باشد و کاراکتری برای خواندن موجود نباشد، فراخوانی متد باعث تولید یک خطا می شود.

خاصیت AtEndOfStream

خاصیت AtEndOfStream ، خاصیتی از آبجکت TextStream است. در هر لحظه، اگر اشاره گر فایل در انتهای فایل باشد (یعنی به آخر فایل رسیده باشیم) ، این خاصیت مقدار True را برمیگرداند. در غیر این صورت مقدار False vا بر میگرداند.
به کمک این خاصیت می توانیم بفهمیم که که کی به انتهای فایل می رسیم.
موقعی که مشغول خواندن فایل هستیم، باید مرتبا بررسی کنیم که آیا به انتهای فایل رسیده ایم یا خیر. زیرا در غیر اینصورت با خطا مواجه می شویم. برای این منظور از خاصیت AtEndOfStream استفاده می شود.

مثال:

برنامه ی زیر کاراکتر های فایل test.txt را 10 تا 10 تا می خواند و به صورت پیغام نشان می دهد. وقتی که به انتهای فایل رسید متوقف می شود. 

Dim ScriptFullName, TestFilePath, FSO, ThisFile, PathToThisFile
'First Get the path to the test.txt file
ScriptFullName = WScript.ScriptFullName
Set FSO = CreateObject("Scripting.FileSystemObject")
Set File = FSO.GetFile(ScriptFullName)
Set PathToThisFile = File.ParentFolder
TestFilePath = PathToThisFile & "\test.txt"
'Now, we open the test.txt file and create a TextStream Object
Set TestFile = FSO.OpenTextFile(TestFilePath, 1)
'Read the file. 5 chars each time
Do While Not TestFile.AtEndOfStream
  WScript.Echo TestFile.Read(10)
Loop
'Close the File
TestFile.Close
'Release allocated memory
Set FSO = Nothing
Set File = Nothing
Set PathToThisFile = Nothing
Set TestFile = Nothing

برنامه ی فوق را می توانید از این جا دانلود کنید:  مثال برای خواندن فایل ها در VBScript

 

متد ReadLine

متد ReadLine از آبجکت TextStream، یک خط از فایل را می خواند و بر می گرداند. آرگومان ندارد

متد ReadAll

متد ReadAll از آبجکت Text Stream به یکباره تمامی محتویات فایل متنی را می خواند و یک رسته شامل کل محتویات فایل را برمیگرداند.
این متد معمولا برای فایل های کوچک به کار می رود. زیرا این متد از یک حافظه ی کوچک برای خواندن کل فایل استفاده می کند. لذا اگر فایل بزرگ باشد، ممکن است محتویات فایل در حافظه جا نشود. برای فایل های بزرگ بهتر است به صورت خط به خط و توسط متد ReadLine عمل خواند را انجام داد.

مثال:

برنامه ی زیر سورس خودش را خط به خط به صورت پیغام به کاربر نشان می دهد.

Const ForReading = 1
Const ForWriting = 2
Dim Fso, ThisFilePath, ThisFile
ThisFilePath = WScript.ScriptFullName
Set Fso = CreateObject("Scripting.FileSystemObject")
Set ThisFile = Fso.OpenTextFile(ThisFilePath, ForReading)
'Now Read the file
Do While Not ThisFile.AtEndOfStream
  strText = ThisFile.ReadLine
  WScript.Echo strText
Loop
'Close the File
ThisFile.Close
'release allocated memory
Set Fso = Nothing
Set ThisFile = Nothing

کد فوق را نیز می توانید از این جا دانلود کنید: خواندن سورس کد های برنامه

توجه کنید که در دو تا فایل ضمیمه شده در این پست، تعداد زیادی پیغام به شما نشان داده می شود که ممکن است شما را کلافه کند :)

دسته بندی‌ها: 

دیدگاه‌ها

سلام

آیا تو VBScript تابعی وجود داره که یک رشته بهش بدی و بره دنبال اون بگرده و شماره ی کاراکتر شروع و پایان رشته رو برگردونه ؟
اگه نیست راه حل چیه ؟؟؟؟
با تشکر فراوان از مدیریت سایت.
___________________________________

Jigsaw

افزودن دیدگاه جدید