Gsub help

I am reading in a file that is basically a csv file but the delimiter is
spaces. I am also using fastercsv to parse the file into an array.
Before fastercsv reads it I am substituting all spaces into commas with
gsub
    l.gsub!(" ", ",")
I have one column in each row that could contain spaces. For example
firstname,lastname,phonenumber,streetname,zip
john crichton 555-555-1234 ^A street name with spaces^ 12345
turns into
john,crichton,555-555-1234,A,street,name,with,spaces,12345
I can place the column that could contain spaces at the end of each row
and then call like this but I would like to preserve those spaces.
        FasterCSV.parse(l) do |row|
        name=row[1]
        lastname=row[2]
        phone=row[3]
        zip=row[4]
        street=row[6...10]
Each street name starts with a ^ and ends with a ^. Does anyone know if
there is way I can replace all spaces up until the first ^ and then
begin again after the last ^ so the street name is preserved with spaces
and each column is separated by commas so my result set looks like the
following?
john,crichton,555-555-1234,A street name with spaces,12345

Thanks

···

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

Hi,

This isn't particularly efficient or clever, but it should work:

"john crichton 555-555-1234 ^A street name with spaces^
12345".scan(/(\w+) (\w+) (\S+) \^(.+)\^ (\d+)/).join ','

- Rob

···

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

Check out the docs for fastercsv - http://fastercsv.rubyforge.org/ -
it looks like the FasterCSV class has default values for separator and
quote characters. You should be able to change those to ' ' & '^',
respectively.

···

On Dec 13, 2:34 pm, Kvetch Kvetch <kve...@gmail.com> wrote:

I am reading in a file that is basically a csv file but the delimiter is
spaces. I am also using fastercsv to parse the file into an array.

yermej wrote:

···

On Dec 13, 2:34�pm, Kvetch Kvetch <kve...@gmail.com> wrote:

I am reading in a file that is basically a csv file but the delimiter is
spaces. �I am also using fastercsv to parse the file into an array.

Check out the docs for fastercsv - http://fastercsv.rubyforge.org/ -
it looks like the FasterCSV class has default values for separator and
quote characters. You should be able to change those to ' ' & '^',
respectively.

Exactly. Like this:

ar=FasterCSV.read( path_to_file,{ :col_sep => " ", :quote_char =>'^' })

hth,

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

yermej wrote:

···

On Dec 13, 2:34�pm, Kvetch Kvetch <kve...@gmail.com> wrote:

I am reading in a file that is basically a csv file but the delimiter is
spaces. �I am also using fastercsv to parse the file into an array.

Check out the docs for fastercsv - http://fastercsv.rubyforge.org/ -
it looks like the FasterCSV class has default values for separator and
quote characters. You should be able to change those to ' ' & '^',
respectively.

Thanks yermej. I wasn't using the fastercsv separator because I was
performing some actions on the data before I read it in with fastercsv.
In the end it probably doesn't matter but thank you for your help.

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

yermej wrote:

···

On Dec 13, 2:34�pm, Kvetch Kvetch <kve...@gmail.com> wrote:

I am reading in a file that is basically a csv file but the delimiter is
spaces. �I am also using fastercsv to parse the file into an array.

Check out the docs for fastercsv - http://fastercsv.rubyforge.org/ -
it looks like the FasterCSV class has default values for separator and
quote characters. You should be able to change those to ' ' & '^',
respectively.

Thanks Yermej. I got the quote characters to solve my problem.
Appreciate it.
--
Posted via http://www.ruby-forum.com/\.

Siep Korteling wrote:

yermej wrote:

I am reading in a file that is basically a csv file but the delimiter is
spaces. �I am also using fastercsv to parse the file into an array.

Check out the docs for fastercsv - http://fastercsv.rubyforge.org/ -
it looks like the FasterCSV class has default values for separator and
quote characters. You should be able to change those to ' ' & '^',
respectively.

Exactly. Like this:

ar=FasterCSV.read( path_to_file,{ :col_sep => " ", :quote_char =>'^' })

hth,

Siep

Thanks Siep. I got it to work nicely. I appreciate you and Yernej's
help

···

On Dec 13, 2:34�pm, Kvetch Kvetch <kve...@gmail.com> wrote:

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

You can omit brackets to make it look a little better:

ar = FasterCSV.read( path_to_file, :col_sep => " ", :quote_char =>'^' )

or, maybe a bit more efficient because you read line by line:

CSV.foreach(path_to_file, :col_sep => " ") do |row|
  ...
end

Note, in 1.9.* FasterCSV has replaced CSV which is why you can use CSV there.

Kind regards

robert

···

2009/12/13 Siep Korteling <s.korteling@gmail.com>:

yermej wrote:

On Dec 13, 2:34�pm, Kvetch Kvetch <kve...@gmail.com> wrote:

I am reading in a file that is basically a csv file but the delimiter is
spaces. �I am also using fastercsv to parse the file into an array.

Check out the docs for fastercsv - http://fastercsv.rubyforge.org/ -
it looks like the FasterCSV class has default values for separator and
quote characters. You should be able to change those to ' ' & '^',
respectively.

Exactly. Like this:

ar=FasterCSV.read( path_to_file,{ :col_sep => " ", :quote_char =>'^' })

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/