# File and I/O Operations
# Writing a string to a file
A string can be written to a file with an instance of the File
class.
file = File.new('tmp.txt', 'w')
file.write("NaNaNaNa\n")
file.write('Batman!\n')
file.close
The File
class also offers a shorthand for the new
and close
operations with the open
method.
File.open('tmp.txt', 'w') do |f|
f.write("NaNaNaNa\n")
f.write('Batman!\n')
end
For simple write operations, a string can be also written directly to a file with File.write
. Note that this will overwrite the file by default.
File.write('tmp.txt', "NaNaNaNa\n" * 4 + 'Batman!\n')
To specify a different mode on File.write
, pass it as the value of a key called mode
in a hash as another parameter.
File.write('tmp.txt', "NaNaNaNa\n" * 4 + 'Batman!\n', { mode: 'a'})
# Open and closing a file
Manually open and close a file.
# Using new method
f = File.new("test.txt", "r") # reading
f = File.new("test.txt", "w") # writing
f = File.new("test.txt", "a") # appending
# Using open method
f = open("test.txt", "r")
# Remember to close files
f.close
Automatically close a file using a block.
f = File.open("test.txt", "r") do |f|
# do something with file f
puts f.read # for example, read it
end
# get a single char of input
Unlike gets.chomp
this will not wait for a newline.
First part of the stdlib must be included
require 'io/console'
Then a helper method can be written:
def get_char
input = STDIN.getch
control_c_code = "\u0003"
exit(1) if input == control_c_code
input
end
Its' imporant to exit if control+c
is pressed.
# Reading from STDIN
# Get two numbers from STDIN, separated by a newline, and output the result
number1 = gets
number2 = gets
puts number1.to_i + number2.to_i
## run with: $ ruby a_plus_b.rb
## or: $ echo -e "1\n2" | ruby a_plus_b.rb
# Reading from arguments with ARGV
number1 = ARGV[0]
number2 = ARGV[1]
puts number1.to_i + number2.to_i
## run with: $ ruby a_plus_b.rb 1 2
# Parameters
Flag | Meaning |
---|---|
"r" | Read-only, starts at beginning of file (default mode). |
"r+" | Read-write, starts at beginning of file. |
"w" | Write-only, truncates existing file to zero length or creates a new file for writing. |
"w+" | Read-write, truncates existing file to zero length or creates a new file for reading and writing. |
"a" | Write-only, starts at end of file if file exists, otherwise creates a new file for writing. |
"a+" | Read-write, starts at end of file if file exists, otherwise creates a new file for reading and writing. |
"b" | Binary file mode. Suppresses EOL <-> CRLF conversion on Windows. And sets external encoding to ASCII-8BIT unless explicitly specified. (This flag may only appear in conjunction with the above flags. For example, File.new("test.txt", "rb") would open test.txt in read-only mode as a binary file.) |
"t" | Text file mode. (This flag may only appear in conjunction with the above flags. For example, File.new("test.txt", "wt") would open test.txt in write-only mode as a text file.) |