Syntax Error

Hi All,

I am somewhat new to Ruby coding and programming altogether,

puts “enter Product ID Number”
product_id = gets.chomp
CSV.foreach(“c:\plantproducts.csv”) do |row|
if product_id == row[0]
do (price * qty)
end
end

puts "Enter Qty)
qty = gets.chomp

the price is given in the csv file when I run the code I get an error

"syntax error, unexpected keyword_do_block do (qty * price)

Can someone give me some advice so that shit code runs?

The CSV file has product_id, name, price , then type…if this helps

at all.

thanks

On Sunday 13 November 2011 06:51:16 Darren H. wrote:

do (price * qty)

Can someone give me some advice so that shit code runs?

The CSV file has product_id, name, price , then type…if this helps

at all.

thanks

The do keyword in the line after the if is wrong. Remove it and
everything
should work, at least after you also add the missing quote at the end of
the
line before the last.

I hope this helps

Stefano

Since I remove the do line, how do I get the output of price which is
located in the CSV file under price by just having a user enter the
product_id?

On Sunday 13 November 2011 07:44:16 Darren H. wrote:

Since I remove the do line, how do I get the output of price which is
located in the CSV file under price by just having a user enter the
product_id?

You don’t need to remove the line with the do, just the do keyword:

puts “enter Product ID Number”
product_id = gets.chomp
CSV.foreach(“c:\plantproducts.csv”) do |row|
if product_id == row[0]
(price * qty) #The do is gone
end
end

puts “Enter Qty)”
qty = gets.chomp

You won’t be able to do anything with the result of price*qty, however,
unless
you store it in a variable.

Stefano

test.rb:14:in block in <main>': undefined local variable or methodprice’ for
main:Object (NameError)
from C:/Ruby192/lib/ruby/1.9.1/csv.rb:1768:in each' from C:/Ruby192/lib/ruby/1.9.1/csv.rb:1202:inblock in foreach’
from C:/Ruby192/lib/ruby/1.9.1/csv.rb:1340:in open' from C:/Ruby192/lib/ruby/1.9.1/csv.rb:1201:inforeach’
from test.rb:12:in `’
#error i have…

#new code
puts “Enter Product ID Number”
product_id = gets.chomp
CSV.foreach(“c:\plantproducts.csv”) do |row|
if product_id == row[0]
(price*qty) == subtotal
puts “Enter Quantity”
quantity = gets.chomp

end
end
subtotal = (price * quantity)
puts subtotal

I don’t understand why price is an unidentified variable… is the
current code not reading it in the CSV file and giving it as an output?

Are you saying that I should add

  • if price == row[2] # because price is in row 2?

Also but the quantity is not located in the CSV file it will be entered
by the customer after they enter the product_id of the plant they want.

Sorry I am slow and not very good with ruby thanks for your time and
patience.

if product_id == row[0]
(price*qty) == subtotal

I don’t understand why price is an unidentified variable… is the
current code not reading it in the CSV file and giving it as an output?

You accessed the product id in the CSV by indexing into the row (row[0])
Why do expect price and qty to be different?

cheers

hi Darren,

puts “enter Product ID Number”
product_id = gets.chomp
CSV.foreach(“c:\plantproducts.csv”) do |row|
if product_id == row[0]
do (price * qty)
end
end

puts "Enter Qty)
qty = gets.chomp

The CSV file has product_id, name, price , then type…if this helps

at all.

neither price nor `qty’ are yet defined when you try to multiply
them, try something like this:

require ‘csv’

puts "enter Product ID Number: "
product_id = gets.chomp

puts "Enter Qty: "
qty = gets.chomp.to_f #convert string input to a float with to_f

CSV.foreach(“c:\plantproducts.csv”) do |row|
if product_id == row[0]
price = row[2].to_f # fetch, convert from string, and store in
price variable
total = (price * qty)
puts “your total is: #{total}”
end
end

hth,

  • j

WOW I my notepad++ wrapped text so that ‘price variable’ was on separate
line not commented out. It worked thanks all for the hep

J-

This is an error i get now,

C:>ruby test1.rb
enter Product ID Number:
1001
Enter Qty:
2
test1.rb:12:in ``’: No such file or directory - price variable
(Errno::ENOENT)
from test1.rb:12:in block in <main>' from C:/Ruby192/lib/ruby/1.9.1/csv.rb:1768:ineach’
from C:/Ruby192/lib/ruby/1.9.1/csv.rb:1202:in block in foreach' from C:/Ruby192/lib/ruby/1.9.1/csv.rb:1340:inopen’
from C:/Ruby192/lib/ruby/1.9.1/csv.rb:1201:in foreach' from test1.rb:9:in

C:>

The price column is the 3rd one so it should be
-price = row[2].to_f # fetch, convert from string, and store in
price variable

Thanks for the help I really appreciate it.

-Darren

-----Messaggio originale-----
Da: Peter H. [mailto:[email protected]]
Inviato: domenica 13 novembre 2011 18:28
A: ruby-talk ML
Oggetto: Re: Syntax Error

The line:

price = row[2].to_f # fetch, convert from string, and store in price variable

should be a single line but has probably been wrapped by thew mail
program.
Either join the two lines together or just delete ‘price variable’.


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%. Zero spese e massima liberta’, aprilo in due
minuti!
Clicca qui: http://adv.email.it/cgi-bin/foclick.cgi?mid=11919&d=29-12

-----Messaggio originale-----
Da: Darren H. [mailto:[email protected]]
Inviato: sabato 12 novembre 2011 22:51
A: ruby-talk ML
Oggetto: Syntax Error

Hi All,

I am somewhat new to Ruby coding and programming altogether,

puts “enter Product ID Number”
product_id = gets.chomp
CSV.foreach(“c:\plantproducts.csv”) do |row| if product_id == row[0]
do
(price * qty) end end

puts "Enter Qty)
qty = gets.chomp

the price is given in the csv file when I run the code I get an error

"syntax error, unexpected keyword_do_block do (qty * price)

Can someone give me some advice so that shit code runs?

The CSV file has product_id, name, price , then type…if this helps

at
all.

thanks


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%. Zero spese e massima liberta’, aprilo in due
minuti!
Clicca qui: http://adv.email.it/cgi-bin/foclick.cgi?mid=11919&d=29-12

The line:

price = row[2].to_f # fetch, convert from string, and store in
price variable

should be a single line but has probably been wrapped by thew mail
program. Either join the two lines together or just delete ‘price
variable’.