نوشتن در فایل

برای نوشتن در یک فایل، از متد ()write استفاده می‌شود. خروجی این متد از نوع عدد است و نشان دهنده تعداد کاراکترهایی است که در فایل نوشته شده‌اند. فرض کنید که یک فایل با نام Sample.txt در داخل درایو D داریم و می‌خواهیم متن Welcome to Ruby Tutorials! را در داخل آن بنویسیم. برای این کار به صورت زیر عمل می‌کنیم :

  1: file = open("D:\\Sample.txt", "w")
  2: 
  3: file.write("Welcome to Ruby Tutorials!")
  4: 
  5: file.close

همانگونه که در کد بالا مشاهده می‌کنید ابتدا فایل را در حالت w (حالت نوشتنی) باز می‌کنیم و سپس در خط 3 با فراخوانی متد ()write متنی که قرار است در داخل فایل نوشته شود را به عنوان آرگومان به آن می‌دهیم و در آخر بعد از اتمام کار فایل را می‌بندیم. با اجرای کد بالا متن Welcome to Ruby Tutorials! در داخل فایل Sample.txt نوشته می‌شود:

حال نحوه باز کردن فایل به صورت +r و نوشتن در آن را تست می‌کنیم. خطوط 1 و 3 کد بالا را به صورت زیر تغییر دهید :

  1: file = open("D:\Sample.txt", "r+")
  2: 
  3: file.write("introduce ")
  4: 
  5: file.close

با اجرای کد بالا متد ()write شروع به نوشتن رشته فعلی بر روی رشته‌های قبلی موجود در فایل می‌کند. یا به طور واضحتر به تعداد کاراکترهای رشته جدید از رشته قبلی حذف و رشته جدید را جایگزین می‌کند. برای روشن شدن مطلب به شکل زیر توجه کنید :

روش دیگر باز کردن فایل‌ها استفاده از a به عنوان آرگومان دوم است. خطوط 1 و 3 کد اصلی را به صورت زیر تغییر دهید :

  1: file = open("D:\Sample.txt", "a");
  2: 
  3: file.write(" for absolute beginner.");
  4: 
  5: file.close();

با اجرای کد بالا متن .for absolute beginner به آخر متن موجود در فایل Sample.txt اضافه می‌شود و شکل نهایی محتویات فایل به صورت زیر در می‌آید :

به یک مثال بهتر در مورد نوشتن در فایل توجه کنید:

 1: begin
 2: 
 3:   file = open("D:\\Sample.txt", "w")
 4: 
 5:   repeat = 1
 6:   while(repeat != 0)
 7:     print "Please enter first name: "
 8:     FirstName = gets.chomp
 9:     print "Please enter last name: "
10:     LastName  = gets.chomp
11:     print "Please enter age: "
12:     Age       = gets.chomp
13:     file.write("##{FirstName}##{LastName}##{Age}\n")
14:     print "Repeat? 1-Yes, 0-No : "
15:     repeat    = gets.to_i
16:   end
17: 
18: rescue Exception => error
19:   print error
20: end
Please enter first name: John
Please enter last name: Smith
Please enter age: 21
Repeat? 1-Yes, 0-No: 1
Please enter first name: Mike
Please enter last name: Roberts
Please enter age: 31
Repeat? 1-Yes, 0-No: 1
Please enter first name: Garry
Please enter last name: Mathews
Please enter age: 27
Repeat? 1-Yes, 0-No: 0

در کد بالا، ما یک فایل را باز کرده ایم (خط 3). هدف کلی کد بالا، این است که، ورودی های گرفته شده از کاربر در داخل یک فایل متنی نوشته شوند. مثلا مشخصات یک یا چند نفر از کاربر دریافت و سپس در یک فایل متنی ذخیره شوند. برای این کار ما باید کد را طوری بنویسیم که هر سری اطلاعات یک نفر را از کاربر بخواهد. برای این کار از دستور while استفاده می کنیم. ابتدا یک متغیر تعریف کرده و مقدار آن را 1 می دهیم (خط 5).

در داخل دستور while چک می کنیم که اگر مقدار این متغیر مخالف عدد 0 بود کدهای بدنه حلقه while اجرا شوند. در داخل بدنه حلقه while مشخصات فرد یا افراد را می گیریم و سپس در خط 13 آنها را در داخل فایل متنی می نویسیم. خطی که باعث می شود حلقه دوباره تکرار شده و مشخصات فرد جدید از کاربر دریافت شود همان خط 15 می باشد. در این خط از کاربر سوال می شود که برای ادامه حلقه و وارد کردن مشخصات فرد جدید عدد 1 و در غیر اینصورت عدد 0 را وارد کند. اگر عدد 0 را وارد کنید، برنامه به اتمام می رسد. با استفاده از متد ()each هم می توان یک آرایه از رشته ها را دریافت کرده و آنها را در فایل بنویسد:

lines = ["Ruby Tutorials", "for absolute beginner."]

File.open("D:\\Sample.txt", "w+") do |file|
  lines.each { |line| file.puts(line) }
end

اکنون که با روش‌های نوشتن در فایل آشنا شدید، در درس بعد شما را با نحوه خواندن محتویات فایل آشنا می‌کنم.