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

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

On Dec 13, 2:34 pm, Kvetch K. [email protected] 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.

yermej wrote:

On Dec 13, 2:34�pm, Kvetch K. [email protected] 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

yermej wrote:

On Dec 13, 2:34�pm, Kvetch K. [email protected] 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.

Siep K. wrote:

yermej wrote:

On Dec 13, 2:34�pm, Kvetch K. [email protected] 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

yermej wrote:

On Dec 13, 2:34�pm, Kvetch K. [email protected] 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.

2009/12/13 Siep K. [email protected]:

Exactly. Like this:

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

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