help needed using a regex .sub - RUBY

This is a discussion on help needed using a regex .sub - RUBY ; I'm trying to insert a NULL between the first pair of commas in the line below if it's not already there. Before: PWCLLP-243-00000002,,Images\1\pwcllp_243_00000002.tif,,,, After: PWCLLP-243-00000002,NULL,Images\1\pwcllp_243_00000002.tif,,,, I want to replace only the first instance of ,, on the line with ,NULL, ...

+ Reply to Thread
Results 1 to 5 of 5

help needed using a regex .sub

  1. Default help needed using a regex .sub

    I'm trying to insert a NULL between the first pair of commas in the line
    below if it's not already there.

    Before: PWCLLP-243-00000002,,Images\1\pwcllp_243_00000002.tif,,,,

    After: PWCLLP-243-00000002,NULL,Images\1\pwcllp_243_00000002.tif,,,,

    I want to replace only the first instance of ,, on the line with ,NULL,

    I can do that with: @record.sub!(',,',',NULL,')

    The problem is if the record already has NULL between those 2 commas,
    I'd get:

    PWCLLP-243-00000002,NULL,Images\1\pwcllp_243_00000002.tif,NULL,,,

    I tried this: @record.sub!('\[[:digit:]],,',',NULL,')

    I figured that would replace the first instance of a digit followed by 2
    commas, but it doesn't work. I'm assuming my syntax is incorrect, but
    I've tried all variations I can think of. Anyone out there have any
    ideas? I'd be very grateful!
    PV
    --
    Posted via http://www.ruby-forum.com/.


  2. Default Re: help needed using a regex .sub

    On Nov 22, 2007 6:33 AM, Peter Vanderhaden <bostonantifan@yahoo.com> wrote:
    > I'm trying to insert a NULL between the first pair of commas in the line
    > below if it's not already there.
    >
    > Before: PWCLLP-243-00000002,,Images\1\pwcllp_243_00000002.tif,,,,
    >
    > After: PWCLLP-243-00000002,NULL,Images\1\pwcllp_243_00000002.tif,,,,
    >
    > I want to replace only the first instance of ,, on the line with ,NULL,
    >
    > I can do that with: @record.sub!(',,',',NULL,')
    >
    > The problem is if the record already has NULL between those 2 commas,
    > I'd get:
    >
    > PWCLLP-243-00000002,NULL,Images\1\pwcllp_243_00000002.tif,NULL,,,
    >
    > I tried this: @record.sub!('\[[:digit:]],,',',NULL,')
    >
    > I figured that would replace the first instance of a digit followed by 2
    > commas, but it doesn't work. I'm assuming my syntax is incorrect, but
    > I've tried all variations I can think of. Anyone out there have any
    > ideas? I'd be very grateful!
    > PV


    You might want to use a CSV library, like FasterCSV. But if you don't
    want that overhead and really want to use a regex...

    When you say the "first instance of ,,", do you really mean "only if
    the first comma on the line is immediately followed by another comma"?

    @record.sub!(/^([^,]*),,/, '\1,NULL,')

    That regex is: Start at the beginning of the line, match all the
    non-comma characters, followed by 2 commas.
    The replacement is: All the non-comma characters, then ',NULL,'
    instead of the two commas.

    -Alex


  3. Default Re: help needed using a regex .sub

    Alex,
    Your solution is exactly what I need, thank you very much! I'm getting
    better with regular expressions the more I work with them, and I really
    appreciate your explanation of this regex.
    PV

    Alex LeDonne wrote:
    > On Nov 22, 2007 6:33 AM, Peter Vanderhaden <bostonantifan@yahoo.com>
    > wrote:
    >>
    >> ideas? I'd be very grateful!
    >> PV

    >
    > You might want to use a CSV library, like FasterCSV. But if you don't
    > want that overhead and really want to use a regex...
    >
    > When you say the "first instance of ,,", do you really mean "only if
    > the first comma on the line is immediately followed by another comma"?
    >
    > @record.sub!(/^([^,]*),,/, '\1,NULL,')
    >
    > That regex is: Start at the beginning of the line, match all the
    > non-comma characters, followed by 2 commas.
    > The replacement is: All the non-comma characters, then ',NULL,'
    > instead of the two commas.
    >
    > -Alex


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


  4. Default Re: help needed using a regex .sub

    Peter Vanderhaden wrote:
    > Alex,
    > Your solution is exactly what I need, thank you very much! I'm getting
    > better with regular expressions the more I work with them, and I really
    > appreciate your explanation of this regex.
    > PV


    On my system, this solution is 80% faster, and if your strings get
    longer it will be faster still:

    str = 'PWCLLP-243-00000002,,Images\1\pwcllp_243_00000002.tif,,,,'

    first_comma_pos = str.index(',')
    next_char_pos = first_comma_pos + 1

    if str[next_char_pos] == ?,
    str.insert(next_char_pos, 'NULL')
    end

    puts str


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


  5. Default Re: help needed using a regex .sub

    7stud -- wrote:
    > On my system, this solution is 80% faster, and if your strings get
    > longer it will be faster still:
    >
    > first_comma_pos = str.index(',')


    ...and twice as fast with this additional change:

    first_comma_pos = str.index(?,)
    --
    Posted via http://www.ruby-forum.com/.


+ Reply to Thread

Similar Threads

  1. Regex help needed
    By Application Development in forum CSharp
    Replies: 1
    Last Post: 10-29-2007, 12:13 PM
  2. regex guru needed
    By Application Development in forum awk
    Replies: 2
    Last Post: 10-18-2007, 06:13 PM
  3. Regex help needed
    By Application Development in forum DOTNET
    Replies: 3
    Last Post: 10-02-2007, 09:37 AM
  4. RegEx Solution Needed
    By Application Development in forum Perl
    Replies: 9
    Last Post: 06-21-2007, 08:46 AM
  5. regex help needed
    By Application Development in forum Javascript
    Replies: 2
    Last Post: 05-18-2007, 09:35 AM