Preface
如果要取得使用者的輸入,可以使用 ARGV, 使用者輸入的命令列引數,會收集為字串陣列並給 ARGV 參考。例如:
- hello.rb
- print "Hello, ", ARGV[0], "\n"
上面這個範例可以更簡潔地寫為以下:
- puts "Hello, #{ARGV[0]}"
- STDERR.print "Hello, #{ARGV[0]}"
在程式執行的過程中,可以使用 gets 方法取得使用者的輸入,使用者輸入文字後按下 Enter,gets 會以字串傳回使用者的輸入,取得的字串會包括換行字元。例如:
- hello2.rb
- print "Input your name: "
- name = gets
- puts "Hello, #{name}!"
注意最後一個行才出現!,這是因為 name 變數參考的字串,最後包括空白字元。如果想裁剪掉字串前後空白字元,像是換行字元,可以使用字串物件的 chomp 方法。例如:
- hello3.rb
- print "Input your name: "
- name = gets.chomp
- puts "Hello, #{name}!"
到目前為止,輸出都是使用 print 或 puts 方法,print 方法可以使用逗號區隔想輸出的文字,如第一個範例所示,puts 也可以,不過要注意,每個文字都會被換行。例如:
- puts "This ", "is ", "a ", "test", "!"
如果要格式化輸出,可以使用 printf 方法。例如:
格式化輸出時,所使用的 %d、%f、%s 等與C語言類似,如果只是要格式化字串,則可以使用 sprintf 方法。例如:
格式化字串另一個簡便的方式,是透過 % 與陣列,例如:
如果要將使用者的輸入字串轉換為整數、浮點等型態,可以使用 to_i、to_f 方法。例如:
to_i、to_f 方法比較寬鬆,如果字串後段混有非數字部份,只會對數字部份予以剖析,如果不想要這個結果,可以使用 Integer 或 Float。例如:
gets 方法是從標準輸入STDIN取得字串,如果想要讀取檔案,可以使用 File.read 方法。例如:
- print "File name: "
- name = gets.chomp
- content = File.read(name)
- puts content
- print "File name: "
- name = gets.chomp
- file = open(name, "r") # "r" 表示檔案供讀取使用
- while line = file.gets
- print line
- end
- file.close
- print "File name: "
- name = gets.chomp
- file = open(name, "r")
- file.each do |line|
- print line
- end
- file.close
- print "File name: "
- name = gets.chomp
- open(name, "r") do |file|
- file.each do |line|
- print line
- end
- end
如果要寫資料至檔案,則在使用 open 方法時,指定模式為 "w",並使用 print、puts 等方法進行資料寫入。例如:
- print "File name: "
- name = gets.chomp
- open(name, "w") do |file|
- file.print "test"
- end
- print "Src: "
- src = gets.chomp
- print "Dest: "
- dest = gets.chomp
- open(src, "rb") do |r_file|
- open(dest, "wb") do |w_file|
- r_file.each_byte do |byte|
- w_file.print([byte].pack("c*"))
- end
- end
- end
有關於不同編碼的檔案讀寫,則可以參考 關於編碼。
沒有留言:
張貼留言