Newbie: fastcsv: Read rows, print rows

D

drubdrub

New to Ruby. It probably shows. Trying to accomplish some simple
initial tasks, and study.

Objectives
1. Read rows from a CSV file
2. Write rows to STDOUT

A cat() equivalent.

I've been looking but don't find it. Are there any good tutorials on
using fastcsv? This might be a good candidate for such.

Many thanks!


require
'fastercsv'

fastercsv.open("rfile2", "r") do |csv|
csvData.each{|row| puts "row: ${row}"}
end
 
J

James Edward Gray II

New to Ruby. It probably shows.

Welcome to Ruby!
Trying to accomplish some simple initial tasks, and study.

Objectives
1. Read rows from a CSV file
2. Write rows to STDOUT

A cat() equivalent.

I've been looking but don't find it. Are there any good tutorials on
using fastcsv? This might be a good candidate for such.

There's the documentation:

http://fastercsv.rubyforge.org/

You'll find basic reading and writing information on this page in
particular:

http://fastercsv.rubyforge.org/classes/FasterCSV.html

There are also some examples in the source:

http://viewvc.rubyforge.mmmultiworks.com/cgi/viewvc.cgi/trunk/
examples/?root=fastercsv
require
'fastercsv'

The above should be on one line. You may also need to add a:

require 'rubygems'

before requiring FasterCSV, depending on your environment.
fastercsv.open("rfile2", "r") do |csv|

There is an error is on the line above, which needs to be:

FasterCSV.open...
csvData.each{|row| puts "row: ${row}"}

Change csvData to csv in the line above. Also replace ${row} with #
{row.inspect}.

That should get you running.

You can do this a little easier using foreach():

FCSV.foreach("rfile2") do |row|
p row
end

Hope that helps.

James Edward Gray II
 
D

drubdrub

Thanks for such a rapid, patient response!

You certainly helped me get "unstuck". Appreciate the references. I
had found the doc pages but was still laboring.

For the record, here is my working code. No rocket science, but may
be useful to someone.

All the best!

<code>
require 'rubygems'
require 'fastercsv'

infile = "infile2.csv"

FasterCSV.open(infile, "r") do |row|
row.each{|row| puts "row: #{row.inspect}"}
end
</
code>

----------------------------------
 
S

Stefan Mahlitz

Thanks for such a rapid, patient response!

You certainly helped me get "unstuck". Appreciate the references. I
had found the doc pages but was still laboring.

For the record, here is my working code. No rocket science, but may
be useful to someone.

All the best!

<code>
require 'rubygems'
require 'fastercsv'

infile = "infile2.csv"

FasterCSV.open(infile, "r") do |row|
row.each{|row| puts "row: #{row.inspect}"}
end
</
code>

Just be aware about the fact that row is changed after row.each
irb(main):001:0> a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
=> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
irb(main):002:0> a.each do |row|
irb(main):003:1* row.each {|row| p row}
irb(main):004:1> p row
irb(main):005:1> end
1
2
3
3
4
5
6
6
7
8
9
9
=> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
 
D

drub

Just be aware about the fact that row is changed after row.each

Thanks for the warning!

There must be a fastercsv feature to get rid of the encapsulating '
characters (e.g. the single quote).

FasterCSV.open(infile, "r") do |row|

row.each do |
field|
field.each do |field|
print "|"
print "#{field}"


end
puts "|"
end
end

The output:
|'field 1'|'field 2'|'field 3'|

I want:
|field 1|field 2|field 3|
 
J

James Edward Gray II

Thanks for the warning!

There must be a fastercsv feature to get rid of the encapsulating '
characters (e.g. the single quote).

FasterCSV.open(infile, "r") do |row|

row.each do |field|
field.each do |field|
print "|"
print "#{field}"


end
puts "|"
end
end

The output:
|'field 1'|'field 2'|'field 3'|

I want:
|field 1|field 2|field 3|

The single quote character is not part of the CSV specification, so
they are not removed. I'm afraid you will need to pluck those out by
hand.

James Edward Gray II
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top