Reading the first line of a file in Ruby
This will read exactly one line and ensure that the file is properly closed immediately after.
strVar = File.open('somefile.txt') {|f| f.readline}
# or, in Ruby 1.8.7 and above: #
strVar = File.open('somefile.txt', &:readline)
puts strVar
Ruby - how to read first n lines from file into array
Here is a one-line solution:
lines = File.foreach('file.txt').first(10)
I was worried that it might not close the file in a prompt manner (it might only close the file after the garbage collector deletes the Enumerator returned by File.foreach). However, I used strace
and I found out that if you call File.foreach
without a block, it returns an enumerator, and each time you call the first
method on that enumerator it will open up the file, read as much as it needs, and then close the file. That's nice, because it means you can use the line of code above and Ruby will not keep the file open any longer than it needs to.
How to open and read a file in one line in ruby
File.read("/path/to/file")
It will read whole file content and return it as a result.
Skipping the first line when reading in a file in 1.9.3
Change each
to each_with_index do |line, index|
and next if index == 0
will work.
How do I read the nth line of a file efficiently in Ruby?
What about IO.foreach
?
IO.foreach('filename') { |line| p line; break }
That should read the first line, print it, and then stop. It does not read the entire file; it reads one line at a time.
How to read lines of a file in Ruby
I believe my answer covers your new concerns about handling any type of line endings since both "\r\n"
and "\r"
are converted to Linux standard "\n"
before parsing the lines.
To support the "\r"
EOL character along with the regular "\n"
, and "\r\n"
from Windows, here's what I would do:
line_num=0
text=File.open('xxx.txt').read
text.gsub!(/\r\n?/, "\n")
text.each_line do |line|
print "#{line_num += 1} #{line}"
end
Of course this could be a bad idea on very large files since it means loading the whole file into memory.
In Ruby- Parsing Directory and reading first row of the file
Why are you assigning x
to file_name
? You can use file_name
directly. And if you are only reading the first line of the file, why not try this?
#!/usr/bin/ruby
dir = "C:/fileload/src"
Dir.foreach(dir) do |file_name|
full = File.join(dir, file_name)
if File.file?(full)
f = File.open(full)
puts f.first
f.close
end
end
You should use File.join to safely combine paths in Ruby. I also checked that you are opening a file using the File.file? method.
Ruby continuously reading from beginning of file
The code you have written is quite unusual in Ruby programming, most of the time a file is read line by line using Enumerable
methods, for example:
file.each { |line| [code here] }
That said you could use the Enumerable#cycle
method to read the file more than one time. Given the following file, say foo.txt
:
foo
bar
You can read it two times using the following code:
open('foo.txt') do |file|
file.cycle(2) { |line| puts line }
end
# Output:
#
# foo
# bar
# foo
# bar
If you pass nil
, or no argument, to cycle
it will read the file forever.
Ruby csv read first line in csv file
It should be false
, not :false
.
Related Topics
How to Require a Specific Version of a Ruby Gem
Rails Flash Message Remains for Two Page Loads
Rails Collection_Select VS. Select
How to Install Ruby Gems When Using Rvm
"Require File.Dirname(_File_)" -- How to Safely Undo Filesystem Dependency
Rendering Partials/View in a Rake Task/Background Job/Model in Rails 4
What Are the Things You Would Like Improved in the Ruby Language
How to Replace Multiple Newlines in a Row with One Newline Using Ruby
Why and When to Use the Shell Instead of Ruby
How to Get the Width of Terminal Window in Ruby
"Rmagick" Gem Installation Issue
How to Log the Entire Trace Back of a Ruby Exception Using the Default Rails Logger
Rails Console - Find Where Created at = Certain Day
Convert JSON String to JSON Array in Rails
How to Get Searchlogic to Work with Rails 3
Where/How to Include Helper Methods for Capybara Integration Tests