Hi,
How could I easily do the following?:
input = ‘111|“aaaa” bbbbb|c’
I would like to get as output following:
output = ‘111|""“aaa”" bbbbb"|c’
to correct wrongly prepared pipe separated file with enclosing the
equation characters.
thanks
chris
Hi,
How could I easily do the following?:
input = ‘111|“aaaa” bbbbb|c’
I would like to get as output following:
output = ‘111|""“aaa”" bbbbb"|c’
to correct wrongly prepared pipe separated file with enclosing the
equation characters.
thanks
chris
On Mar 19, 2008, at 10:00 , ciapecki wrote:
to correct wrongly prepared pipe separated file with enclosing the
equation characters.
My interpretation of what you need is:
input = '111|"aaaa" bbbbb|c'
fields = input.split('|')
fields[1].gsub!('"', '""')
fields[1] = %Q{"#{fields[1]}"}
output = fields.join('|')
Depending on the input that may not be valid, for example if fields[1]
may contain a pipe. Anyway being a mal-formed input assumptions depend
on the actual data.
– fxn
On 19 Mrz., 10:09, Xavier N. [email protected] wrote:
Depending on the input that may not be valid, for example if fields[1]
may contain a pipe. Anyway being a mal-formed input assumptions depend
on the actual data.– fxn
your solution works, and thanks for that,
I am waiting though for a regexp solution,
thanks anyway
chris
Robert K. wrote:
I am waiting though for a regexp solution,
Even 2 regexps:
Cheersrobert
Robert,
How fixed is the input. If it is always of the same format, then what
about:
input = ‘111|“aaaa” bbbbb|c’
output=input.gsub(/"/,’""’).gsub(/(.)|(.)|(.*)/,’\1|"\2"|\3’)
Mac
On 19.03.2008 11:21, ciapecki wrote:
output = fields.join('|')Depending on the input that may not be valid, for example if fields[1]
may contain a pipe. Anyway being a mal-formed input assumptions depend
on the actual data.your solution works, and thanks for that,
I am waiting though for a regexp solution,
Even 2 regexps:
irb(main):001:0> input = ‘111|“aaaa” bbbbb|c’
=> “111|“aaaa” bbbbb|c”
irb(main):002:0> input.gsub(/[^|]+/) {|m| m.gsub!(/"/,’""’) ?
‘"’<<m<<’"’ : m}
=> “111|”"“aaaa”" bbbbb"|c"
irb(main):003:0> puts input.gsub(/[^|]+/) {|m| m.gsub!(/"/,’""’) ?
‘"’<<m<<’"’ : m}
111|""“aaaa”" bbbbb"|c
=> nil
Cheers
robert
Paul M. wrote:
Robert,
Oops. I meant Chris of course.
Mac
On 19 Mrz., 22:28, Robert K. [email protected] wrote:
fields = input.split('|')I am waiting though for a regexp solution,
111|“”“aaaa”" bbbbb"|c
=> nilCheers
robert
this is just great,
thanks robert for this
chris
On 20 Mrz., 01:18, Paul M. [email protected] wrote:
–
Posted viahttp://www.ruby-forum.com/.
Hi Mac,
The format is fixed but contains 49 fields separated by | so your one-
liner could not fit into one line ![]()
thanks,
chris
2008/3/20, ciapecki [email protected]:
your solution works, and thanks for that,
‘"’<<m<<‘"’ : m}
111|“”“aaaa”" bbbbb"|c
=> nilCheers
robertthis is just great,
thanks robert for this
You’re welcome. Btw, this is even better (also faster)
irb(main):003:0> input = ‘111|“aaaa” bbbbb|c’
=> “111|"aaaa" bbbbb|c”
irb(main):004:0> input.gsub(/“/,'”“‘).gsub(/[^|]"[^|]/,’”\&“')
=> “111|"""aaaa"" bbbbb"|c”
irb(main):005:0> puts input.gsub(/”/,‘“”’).gsub(/[^|]"[^|]/,‘“\&”’)
111|“”“aaaa”" bbbbb"|c
=> nil
This could even be a bit faster:
irb(main):006:0> input.gsub(/“/,'”“').gsub(/[^|”]"[^|]/,‘“\&”’)
=> “111|"""aaaa"" bbbbb"|c”
Kind regards
robert
ciapecki wrote:
The format is fixed but contains 49 fields separated by | so your one-
liner could not fit into one line
A minor change 
input = ‘111|“aaaa” bbbbb|c|“22222” asdasd|ddd|"aaaa"qqqqq|jjjj’
output=input.gsub(/"/,’""’).gsub(/(.?)|(.?)|(.*?)/,’\1|"\2"|\3’)
=>111|""“aaaa”" bbbbb"|c|""“22222"” asdasd"|ddd|""“aaaa”“qqqqq”|jjjj
This was just to point out that there is no need for multiple replace
options, but you need to know the layout is correct and in a given
pattern. Robert’s is the better and more robust solution (and also
shorter).
Mac
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs