Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > regexp conditional

Reply
Thread Tools

regexp conditional

 
 
ciapecki
Guest
Posts: n/a
 
      03-19-2008
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
 
Reply With Quote
 
 
 
 
Xavier Noria
Guest
Posts: n/a
 
      03-19-2008
On Mar 19, 2008, at 10:00 , ciapecki wrote:
> 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.


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



 
Reply With Quote
 
 
 
 
ciapecki
Guest
Posts: n/a
 
      03-19-2008
On 19 Mrz., 10:09, Xavier Noria <(E-Mail Removed)> wrote:

> 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



your solution works, and thanks for that,
I am waiting though for a regexp solution,

thanks anyway
chris

 
Reply With Quote
 
Robert Klemme
Guest
Posts: n/a
 
      03-19-2008
On 19.03.2008 11:21, ciapecki wrote:
> On 19 Mrz., 10:09, Xavier Noria <(E-Mail Removed)> wrote:
>
>> 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.

>
> 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
 
Reply With Quote
 
Paul Mckibbin
Guest
Posts: n/a
 
      03-20-2008
Robert Klemme wrote:
>> I am waiting though for a regexp solution,

> Even 2 regexps:
> Cheers
>
> robert


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
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Paul Mckibbin
Guest
Posts: n/a
 
      03-20-2008
Paul Mckibbin wrote:
>
> Robert,
>

Oops. I meant Chris of course.

>
> Mac


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

 
Reply With Quote
 
ciapecki
Guest
Posts: n/a
 
      03-20-2008
On 20 Mrz., 01:18, Paul Mckibbin <(E-Mail Removed)> wrote:
> Paul Mckibbin wrote:
>
> > Robert,

>
> Oops. I meant Chris of course.
>
>
>
> > Mac

>
> --
> 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
 
Reply With Quote
 
ciapecki
Guest
Posts: n/a
 
      03-20-2008
On 19 Mrz., 22:28, Robert Klemme <(E-Mail Removed)> wrote:
> On 19.03.2008 11:21, ciapecki wrote:
>
>
>
> > On 19 Mrz., 10:09, Xavier Noria <(E-Mail Removed)> wrote:

>
> >> 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.

>
> > 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


this is just great,
thanks robert for this


chris
 
Reply With Quote
 
Robert Klemme
Guest
Posts: n/a
 
      03-20-2008
2008/3/20, ciapecki <(E-Mail Removed)>:
> On 19 Mrz., 22:28, Robert Klemme <(E-Mail Removed)> wrote:
> > On 19.03.2008 11:21, ciapecki wrote:
> >
> >
> >
> > > On 19 Mrz., 10:09, Xavier Noria <(E-Mail Removed)> wrote:

> >
> > >> 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.

> >
> > > 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

>
>
> this 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

--
use.inject do |as, often| as.you_can - without end

 
Reply With Quote
 
Paul Mckibbin
Guest
Posts: n/a
 
      03-20-2008
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
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[regexp] How to convert string "/regexp/i" to /regexp/i - ? Joao Silva Ruby 16 08-21-2009 05:52 PM
Newbie: Simple conditional on regexp match Kenneth Brun Nielsen Perl Misc 3 08-16-2008 06:53 PM
Programmatically turning a Regexp into an anchored Regexp Greg Hurrell Ruby 4 02-14-2007 06:56 PM
? ELSE Conditional Comment / Using Conditional Comments Inside Other Tags To Comment Out Attributes Alec S. HTML 10 04-16-2005 02:21 AM
Conditional options to a regexp match? David Wake Perl Misc 7 10-11-2003 12:37 AM



Advertisments