How to use csv files in ruby

I am able to write parts of the code but I am not able to join the code
and use loops. I am quite new to RUBY and trying to do this project.

We have a list of customers
We have a list of products.

The customer is asked if he is new or returning
A new customer puts in his information and the customer database is
populated with his information if new customer
if existing customer, then with his name his details are pulled from the
database

Then he has to enter the shopping cart with the product names and
quantity,
Then from the product table, the price of the product table, the price
of the product and the total (quantity*price) is calculated
in the end
it should print out the list of the products quantity price
total sum
tax
shipping
and
total= total sum+tax+shipping

all this information should be in a new csv file with the customer
information and saved in the folder.

this is what I have so far and I am freaking out.Its all over the place

require ‘csv’

Getting Information from the new customer and updating the csv file

puts “Are you a new cuntomer? y/n”
ans = gets.chomp
while ans == ‘y’ do

module CustomerRelated
class Customer
def initialize( customer_id, fname, lname, address1, address2, city,
state, zip, ph_no)
@fname = fname
@lname = lname
@address1 = address1
@address1 = address1
@city = city
@state = state
@zip = zip
@ph_no = ph_no
end

puts “Enter first name”
fname = gets.chomp
puts “Enter last name”
lname = gets.chomp
puts “Enter your street address”
address1= gets.chomp
puts “Enter your House no./Apt no.”
address2= gets.chomp
puts “Enter the City”
city = gets.chomp
puts “Enter the State”
state = gets.chomp
puts “Enter your Zip code”
zip = gets.chomp
puts “Enter your Phone Number”
ph_no = gets.chomp

#getting the customer data in the file
CSV.open(“customer.csv”, “a”) do |csv|
#csv << [“First_Name”, “Last_Name”, “Address_1”, “City” , “Zip” ,
“Ph_No”]
csv << [fname, lname, address1, address2, city, state, zip, ph_no]

end

end

puts “What is your First Name?”

class Sale
def initialize( product_name, product_id, price, quantity,
total_price, tax, payment_type, shipping)

@product_name = product_name
@product_id = product_id
@price = price
@quantity = quantity
@total_price = total_price
@tax = tax
@payment_type = payment_type
@shipping = shipping

end

puts “Enter name of the product”
product_name = gets.chomp
puts “Enter the quantity”
quantity = gets.chomp.to_i

CSV.foreach(“products.csv”, “r”) do |row|
if product_name == row[1]
product_id = row[0]
price = row[2].to_f # fetch, convert from string, and store in
price variable
total_price = (price * quantity)

#getting the customer data in the file
CSV.open(“Shopping_list.csv”, “a”) do |csv|
#csv << [“First_Name”, “Last_Name”, “Address_1”, “City” , “Zip” ,
“Ph_No”]
csv << [product_id, product_name, price, quantity, total_price]

end

puts “Do you have more products to add ? (y/n)?”
answer = gets.chomp
if answer = y then

else
#calculating shipping and tax
sub_total=0
puts “Your Sub total is”
CSV.foreach(“Shopping_list.csv”, “r”) do |row|
sub_total= {for |x| do row[4]

puts “Enter your zip code”
zip = gets.chomp

CSV.foreach(“zipcode.csv”) do |row|
if zipcode == row[0]

shipping = row[1]

hello sharma,

i think you’ll be able to figure this out better if you follow some
simple formatting guidelines that make reading code much easier for
others and for you! it’s a good idea to indent each block, making it
easier to follow the flow of the code to spot missing ends that wreak
havoc. something like:

class Engine
def initialize(…)

if …


end


end
end

a good habit to get into is that whenever you make a call that
requires an end statement, write the end immediately after making the
call, before writing any of the code that goes in between - that way
you’re sure that you close every loop or block that you open… start
like this:

class Engine
end

…and not like this:

class Engine
def inialize

…if you indent your above code, you’ll see that there are a lot of
missing ends and it is pretty ‘all over the place…’ maybe try
starting over - and start simply…

if i understand correctly, what you’re doing here is making a
salesperson who asks if we are a current customer or not before making a
sale. so start by making a salesperson…

class Salesperson
end

it’s not much, but it won’t give you any errors! now, the first thing
we want this guy to do when we call him is to ask if the person at the
other end of the terminal is a current client, right?

class Salesperson

def initialize(name)
puts "Hi, I’m #{name}, are you a current customer? (y/n) "
answer = gets.chomp.downcase
if answer == “y”
sell_to_customer
elsif answer == “n”
register_new_customer
else
raise “answer must be ‘y’ or ‘n’”
end
end

def sell_to_customer
end

def register_new_customer
end

end

joe = Salesman.new(“Joe”)

…so, we create a salesman called joe, and he asks us if we’re a
current customer or not. if we are, a sell_to_customer method is
called, otherwise a register_new_customer method is called - these are
both things that salespeople do every day…

write little bits of code and run it often to see where it breaks…
notice that you can call methods before writing them fully - it’s enough
to just define and end them, to make sure you’re getting that far. so
after running this, the next thing you could think of is what a
salesperson does when he or she registers a new customer…

first they ask you questions, and then they record that information
(not the other way around, this is important!) so back in the
Salesperson class add some stuff to the register_new_customer method:

def register_new_customer
puts "What’s your first name please: "
fname = gets.chomp
end

…this gets a string from the terminal and then assigns it to a
variable - the order is important, you can’t call a variable before
you’ve assigned it.

then you could put all the info you get into an array:

def register_new_customer
puts "What’s your first name please: "
fname = gets.chomp

customer_info = []
customer_info << fname

end

…and send that array off to update your csv file.

take things step by step, and try to do things as simply as possible -
i’m sure you’ll figure it out :wink:

good luck -

  • j

I think I’ll rewrite the code following formatting.
no we dont have a salesman. New or old customer can buy we just want to
know if he is existing customer so that we dont have multiple entries in
the csv file for the same person.

if I take joe ( the sales person) This code should work right?? whats
wrong here?
require ‘csv’

puts "Hi, are you a current customer? (y/n) "
answer = gets.chomp.downcase
if answer == "y"
  sell_to_customer
elsif answer == "n"
  register_new_customer
else
  raise "answer must be 'y' or 'n'"
end

def register_new_customer ( customer_id, fname, lname, address1,
address2, city, state, zip, ph_no)

puts “Enter first name please”
fname = gets.chomp
puts “Enter last name please”
lname = gets.chomp
puts “Enter your street address please”
address1= gets.chomp
puts “Enter your House no./Apt no.”
address2= gets.chomp
puts “Enter the City”
city = gets.chomp
puts “Enter the State”
state = gets.chomp
puts “Enter your Zip code”
zip = gets.chomp
puts “Enter your Phone Number”
ph_no = gets.chomp
puts “Thank you very much”

#getting the customer data in the file
CSV.open(“customer.csv”, “a”) do |csv|
#csv << [“First_Name”, “Last_Name”, “Address_1”, “City” , “Zip” ,
“Ph_No”]
csv << [fname, lname, address1, address2, city, state, zip, ph_no]

end
end

and then irrespective of them being new or old once they register, I
want them to go to this method

#calculating shipping and tax
def calculate_the total
sub_total=0
tax = 0
shipping = 0

puts “Your Sub total is”
CSV.foreach(“Shopping_list.csv”, “r”) do |row|
sub_total= {for |x| do sub_total + row[4]}

puts “Enter your zip code”
zip = gets.chomp

CSV.foreach(“zipcode.csv”) do |row|
if zipcode == row[0]

shipping = row[1]

end
end

Did u check my previous post?
obviously its not working
but I dont know why
I am very new to ruby and this is a class I had to take for object
oriented programming.
I have no prior programming experience so I dont understand most logics.
I appreciate your patience

jake kaiden wrote in post #1031718:

nehal sharma wrote in post #1031712:

I think I’ll rewrite the code following formatting.

good idea, i think you’ll find it helpful.

no we dont have a salesman.

i was thinking of the ‘program’ as a salesman :wink:

good luck-

  • j

nehal sharma wrote in post #1031712:

I think I’ll rewrite the code following formatting.

good idea, i think you’ll find it helpful.

no we dont have a salesman.

i was thinking of the ‘program’ as a salesman :wink:

good luck-

  • j

-----Messaggio originale-----
Da: jake kaiden [mailto:[email protected]]
Inviato: luned 14 novembre 2011 12:12
A: ruby-talk ML
Oggetto: Re: How to use csv files in ruby

hi Nehal

nehal sharma wrote in post #1031717:


elsif answer == “n”
register_new_customer

def register_new_customer ( customer_id, fname, lname, address1,
address2, city, state, zip, ph_no) …

notice that you call register_new_customer with no arguments, but
define
it to take 9 arguments. this will certainly cause errors. the
register_new_customer method is where all of that information is
collected
and stored (where the ‘salesman’ asks you your data and records
it…) you don’t know any of that information yet when you call the
register_new_customer method, so leave off the arguments:


elsif answer == “n”
register_new_customer

def register_new_customer
puts “Enter first name please”
fname = gets.chomp
… etc.
end

looks like you’re on the right track, keep at it!

  • j


Posted via http://www.ruby-forum.com/.


Caselle da 1GB, trasmetti allegati fino a 3GB e in piu’ IMAP, POP3 e
SMTP autenticato? GRATIS solo con Email.it http://www.email.it/f

Sponsor:
Capodanno al parco Oltremare Riccione: Pacchetto hotel 3 stelle in
centro + ingresso al parco.

hi Nehal

nehal sharma wrote in post #1031717:


elsif answer == “n”
register_new_customer

def register_new_customer ( customer_id, fname, lname, address1,
address2, city, state, zip, ph_no)

notice that you call register_new_customer with no arguments, but
define it to take 9 arguments. this will certainly cause errors. the
register_new_customer method is where all of that information is
collected and stored (where the ‘salesman’ asks you your data and
records
it…) you don’t know any of that information yet when you call the
register_new_customer method, so leave off the arguments:


elsif answer == “n”
register_new_customer

def register_new_customer
puts “Enter first name please”
fname = gets.chomp
… etc.
end

looks like you’re on the right track, keep at it!

  • j

-----Messaggio originale-----
Da: Mrin alini [mailto:[email protected]]
Inviato: domenica 13 novembre 2011 21:48
A: ruby-talk ML
Oggetto: How to use csv files in ruby

I am able to write parts of the code but I am not able to join the code
and
use loops. I am quite new to RUBY and trying to do this project.

We have a list of customers
We have a list of products.

The customer is asked if he is new or returning A new customer puts in
his
information and the customer database is populated with his information
if
new customer if existing customer, then with his name his details are
pulled
from the database

Then he has to enter the shopping cart with the product names and
quantity,
Then from the product table, the price of the product table, the price
of
the product and the total (quantity*price) is calculated in the end it
should print out the list of the products quantity price total sum tax
shipping and total= total sum+tax+shipping

all this information should be in a new csv file with the customer
information and saved in the folder.

this is what I have so far and I am freaking out.Its all over the place

require ‘csv’

Getting Information from the new customer and updating the csv file

puts
“Are you a new cuntomer? y/n”
ans = gets.chomp
while ans == ‘y’ do

module CustomerRelated
class Customer
def initialize( customer_id, fname, lname, address1, address2, city,
state, zip, ph_no)
@fname = fname
@lname = lname
@address1 = address1
@address1 = address1
@city = city
@state = state
@zip = zip
@ph_no = ph_no
end

puts “Enter first name”
fname = gets.chomp
puts “Enter last name”
lname = gets.chomp
puts “Enter your street address”
address1= gets.chomp
puts “Enter your House no./Apt no.”
address2= gets.chomp
puts “Enter the City”
city = gets.chomp
puts “Enter the State”
state = gets.chomp
puts “Enter your Zip code”
zip = gets.chomp
puts “Enter your Phone Number”
ph_no = gets.chomp

#getting the customer data in the file
CSV.open(“customer.csv”, “a”) do |csv|
#csv << [“First_Name”, “Last_Name”, “Address_1”, “City” , “Zip” ,
“Ph_No”]
csv << [fname, lname, address1, address2, city, state, zip, ph_no]

end

end

puts “What is your First Name?”

class Sale
def initialize( product_name, product_id, price, quantity,
total_price,
tax, payment_type, shipping)

@product_name = product_name
@product_id = product_id
@price = price
@quantity = quantity
@total_price = total_price
@tax = tax
@payment_type = payment_type
@shipping = shipping

end

puts “Enter name of the product”
product_name = gets.chomp
puts “Enter the quantity”
quantity = gets.chomp.to_i

CSV.foreach(“products.csv”, “r”) do |row|
if product_name == row[1]
product_id = row[0]
price = row[2].to_f # fetch, convert from string, and store in
price variable
total_price = (price * quantity)

#getting the customer data in the file
CSV.open(“Shopping_list.csv”, “a”) do |csv|
#csv << [“First_Name”, “Last_Name”, “Address_1”, “City” , “Zip” ,
“Ph_No”]
csv << [product_id, product_name, price, quantity, total_price]

end

puts “Do you have more products to add ? (y/n)?”
answer = gets.chomp
if answer = y then

else
#calculating shipping and tax
sub_total=0
puts “Your Sub total is”
CSV.foreach(“Shopping_list.csv”, “r”) do |row|
sub_total= {for |x| do row[4]

puts “Enter your zip code”
zip = gets.chomp

CSV.foreach(“zipcode.csv”) do |row|
if zipcode == row[0]

shipping = row[1]

Attachments:
http://www.ruby-forum.com/attachment/6742/products.csv
http://www.ruby-forum.com/attachment/6743/customer.csv


Posted via http://www.ruby-forum.com/.


Caselle da 1GB, trasmetti allegati fino a 3GB e in piu’ IMAP, POP3 e
SMTP autenticato? GRATIS solo con Email.it http://www.email.it/f

Sponsor:
Conto Arancio al 4,20%. Soldi sempre disponibili, zero spese, aprilo in
due minuti!
Clicca qui: http://adv.email.it/cgi-bin/foclick.cgi?mid=11920&d=29-12

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs