I am working on a way to process the status of products and I want to
use a bar code reader to make things easier. I already have the scanner
which simply reads the bar code into the keyboard port and appends a
carriage return. I was thinking of printing bar codes that would
contain information which is useless externally but useful to my app.
For instance…
Bar code: 123456789
Which would break down into:
order (first three) => 123
product (next five) => 45678
status (last digit) => 9
I would then use a nested form to feed the information in the database.
My question is… I get the string from the barcode reader as one long
string of numbers with no delimiters so how do I break that string down?
I can make sure the position of the values is the same in the barcode
when we print them but split and chunk both want a delimiter. Thanks,
stephen
order (first three) => 123
stephen
Use ranges as an index:
~$ irb
irb(main):001:0> barcode = ‘123456789’
=> “123456789”
irb(main):002:0> order = barcode[0…2]
=> “123”
irb(main):003:0> product = barcode[3…7]
=> “45678”
irb(main):004:0> status = barcode[8…8]
=> “9”
-Jonathan N.
Jonathan N. wrote:
order (first three) => 123
stephen
irb(main):004:0> status = barcode[8…8]
=> “9”
-Jonathan N.
Another idea:
$ irb -r scanf
“123456789”.scanf("%3d%5d%1d")
=> [123, 45678, 9]
(note that the strings are converted to integers for you)
Joel VanderWerf wrote:
Jonathan N. wrote:
order (first three) => 123
stephen
irb(main):004:0> status = barcode[8…8]
=> “9”
-Jonathan N.
Another idea:
$ irb -r scanf
“123456789”.scanf("%3d%5d%1d")
=> [123, 45678, 9]
(note that the strings are converted to integers for you)
Another:
raise “Bad barcode” unless “123456789” =~ /\A(\d{3})(\d{5})(\d)\z/
order, product, status = $1, $2, $3
Joel VanderWerf wrote:
Another idea:
$ irb -r scanf
“123456789”.scanf("%3d%5d%1d")
=> [123, 45678, 9]
(note that the strings are converted to integers for you)
“123456789”.unpack(“A3A5A1”)
#=> [“123”, “45678”, “9”]
I don’t know how to use unpack to deliver integers. Strings may better
in this case anyway, because leading zero’s survive.