On Dec 19, 2008, at 2:58 PM, Frederick Cheung wrote:
> On 19 Dec 2008, at 19:48, Corey Murphy <rails-mailing-l...@andreas-
> s.net> wrote:
>
>> Why would the following regular expression produce the results below?
>>
>> ****input:
>> john,doe,"1,200.99",training,12345
>>
>> ****code executed on input:
>> values = line.split(/("\d*,\d+\.\d*")|,/)
>>
>> ****output:
>> ["john","doe","","1,200.99","","training","12345"]
>>
> Pretend you're split. You see the comma after doe so you split. Then
> you see the other part of your regex and so you split again, resulting
> in the empty array
>
> Fred
>> What's up with the two empty array indexes that are generated during
>> the
>> split surrounding my dollar value?
>>
>> The regular expression is pretty explicit and the input string  
>> doesn't
>> contain anything that should cause them when run through the
>> expression,
>> yet there they are so obviously I'm doing something wrong in my
>> regexp.
>> Help.

I think you actually get:
=> ["john", "doe", "", "\"1,200.99\"", "", "training", "12345"]
as your output. (At least I do.)

However, it looks like your input is CSV so why not let a CSV library  
do the heavy-lifting for you:

irb> require 'rubygems'
=> true
irb> require 'fastercsv'
=> true
irb> FasterCSV.parse_line(line)
=> ["john", "doe", "1,200.99", "training", "12345"]

Note: FasterCSV becomes the CSV in the standard library for Ruby 1.9,  
but it's a gem before that so look at the rdocs/ri for whatever you're  
using.

-Rob

Rob Biedenharn          http://agileconsultingllc.com
r...@agileconsultingllc.com


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to