Alex LeDonne
11/22/2007 3:28:00 PM
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