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,
...
-
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/.
-
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
-
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/.
-
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/.
-
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/.
Similar Threads
-
By Application Development in forum CSharp
Replies: 1
Last Post: 10-29-2007, 12:13 PM
-
By Application Development in forum awk
Replies: 2
Last Post: 10-18-2007, 06:13 PM
-
By Application Development in forum DOTNET
Replies: 3
Last Post: 10-02-2007, 09:37 AM
-
By Application Development in forum Perl
Replies: 9
Last Post: 06-21-2007, 08:46 AM
-
By Application Development in forum Javascript
Replies: 2
Last Post: 05-18-2007, 09:35 AM