خواندن از فایل

در Ruby برای خواندن یک فایل از متدهای ()readline() ،read و ()readlines استفاده می شود. مثلا برای خواندن فایل متنی که در درس قبل ایجاد کردیم به صورت ساده، ابتدا فایل را در حالت r باز می کنیم و سپس با استفاده از متد ()read آن را می خوانیم :

file = open("D:\\Sample.txt","r")
	 
content = file.read	
 	
print content
John#Smith#21
Mike#Roberts#31
Garry#Matthews#27

برای خواندن یک خط از فایل می توان از متد ()readline استفاده کرد :

file = open("D:\\Sample.txt","r")

line = file.readline

print line
John#Smith#21

این متد یک آرگومان می گیرد که تعداد کاراکترهایی از همان خطی که قرار است خوانده شوند، می باشد:

file = open("D:\\Sample.txt", "r")

line = file.readline(4)

print line
John

در کد بالا عدد 4 یعنی 4 کاراکتر اول خط خوانده شوند. برای خواندن تمام خطوط یک فایل متنی علاوه بر متد ()read می توان از متد ()readlines هم استفاده کرد :

file = open("D:\\Sample.txt", "r");

lines = file.readlines();
for line in lines
    print line
end
John#Smith#21
Mike#Roberts#31
Garry#Matthews#27

این متد تمام خطوط فایل را خوانده و به صورت یک آرایه بر می گرداند :

['John#Smith#21\n', 'Mike#Roberts#31\n', 'Garry#Matthews#27']

در نتیجه آرایه بالا را می توان با استفاده از یک حلقه for در خطوط مختلف نمایش داد. می توانیم خروجی کد بالا را به صورت زیر بیشتر سفارشی کنیم :

 1: file = open("D:\\Sample.txt", "r")
 2: 
 3: lines = file.readlines
 4: 
 5: for line in lines
 6:   line = line.gsub("#", " ").split
 7:   firstName = line[0]
 8:   lastName  = line[1]
 9:   age       = line[2]
10:   puts "Name : #{firstName} #{lastName}"
11:   puts "Age  : #{age}"
12: end
Name : John Smith
Age  : 21
Name : Mike Roberts
Age  : 31
Name : Garry Matthews
Age  : 27

کلمه lines در خط 5 کد بالا، یک آرایه به صورت زیر است:

['John#Smith#21\n', 'Mike#Roberts#31\n', 'Garry#Matthews#27']

برای حذف علامت # و جایگزین کردن آن با فضای خالی از متد ()gsub استفاده کرده ایم. با استفاده خطوط 6-5، در میان آیتم های آرایه lines که همان خطوط فایل Sample.txt هستند می گردیم و با استفاده از متد ()gsub علامت # را با فضای خالی جایگزین کرده و سپس با استفاده از متد ()split هر آیتم را بر اساس فضای خالی و علامت n\ تکه تکه می کنیم. خطوط 6-5 آرایه lines را به صورت زیر در می آورند:

['John', 'Smith', '21']
['Mike', 'Roberts', '31']
['Garry', 'Matthews', '27']

یعنی هر خط را به یک آرایه تبدیل می کنند. حال با استفاده از اندیس، هر یک از آیتم های آرایه ها را در یک متغیر ریخته و در خطوط 10 و 11 چاپ می کنیم. نکته پایانی که بهتر است در همین جا به آن اشاره کنیم این است که شما می توانید قبل از خواندن محتویات فایل، تست کنید که آیا فایل قابل خواند هست یا خیر. این کار را می توانید با استفاده از متد ?readable به صورت زیر انجام دهید:

file = open("D:\\Sample.txt", "r")

if File.readable?(file)
  lines = file.readlines
  for line in lines
    print line
  end
end

این متد در واقع تست می کند که آیا فایل در حالت خواندن یا r باز شده است یا نه؟ اگر شما “r” را به “w” یعنی یعنی حالت نوشتن باز و برنامه را اجرا کنید با خطا مواجه می شوید.