A couple of basic questions

Hi,

Q.1: I was processing file/dir names with the following snippet:

Find.find(wd) do |item| # Subordinate file/directory fully-qualified
names
  if File.directory?(item)
    # Process directory name
    if item =~ /portfolio/i
      item_saved = ' ' + item
      item.gsub!(/portfolio/, 'position')

When I saved item in item_saved without modification, the gsub change
both the item name as well as the saved name (because what was saved
was a reference to item, not item's content). So my work-around was
to save a modified name. That doesn't seem like "The Ruby Way".
What's a better way?

Q. 2: In that same snippet, I made two substitutions:

      item.gsub!(/portfolio/, 'position')
      item.gsub!(/Portfolio/, 'Position')

That's also a kluge. But the following didn't compile:

      item.gsub!(/([pP])ortfolio/, $1 + 'osition')

Is there a "Ruby Way" to reduce the redundancy?

Thanks in Advance,
Richard

RichardOnRails wrote:

Find.find(wd) do |item| # Subordinate file/directory fully-qualified
names

For the sake of the deity or not of your choice, use Pathname!!

      item.gsub!(/([pP])ortfolio/, $1 + 'osition')

Would item.gsub!(/([pP])ortfolio/, '\1osition') work?

I suspect this would work:

    item.gsub!(/([pP])ortfolio/){ $1 + 'osition' }

···

--
   Phlip

Hi,

Q.1: I was processing file/dir names with the following snippet:

Find.find(wd) do |item| # Subordinate file/directory fully-qualified
names
if File.directory?(item)
   # Process directory name
   if item =~ /portfolio/i
     item_saved = ' ' + item
     item.gsub!(/portfolio/, 'position')

When I saved item in item_saved without modification, the gsub change
both the item name as well as the saved name (because what was saved
was a reference to item, not item's content). So my work-around was
to save a modified name. That doesn't seem like "The Ruby Way".
What's a better way?

Leave item alone and store the new name in a new variable:

if ...
new_item = item.gsub(/portfolio/, 'position')

(notice the missing "!")

Q. 2: In that same snippet, I made two substitutions:

     item.gsub!(/portfolio/, 'position')
     item.gsub!(/Portfolio/, 'Position')

That's also a kluge. But the following didn't compile:

     item.gsub!(/([pP])ortfolio/, $1 + 'osition')

This cannot work because $1 is evaluated only once, i.e. before #gsub
is invoked. You need something like Phlip suggested.

item.gsub /([pP])ortfolio/, '\\1osition'

Is there a "Ruby Way" to reduce the redundancy?

Yes.

Cheers

robert

···

2008/7/30 RichardOnRails <RichardDummyMailbox58407@uscomputergurus.com>:

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

Hi Philip & Robert,

Thank you both very much for clearing the fog from my brain :slight_smile: BTW,
the deity of choice for me is the null set :slight_smile:

Best wishes,
Richard

···

On Jul 30, 3:33 am, Robert Klemme <shortcut...@googlemail.com> wrote:

2008/7/30 RichardOnRails <RichardDummyMailbox58...@uscomputergurus.com>:

> Hi,

> Q.1: I was processing file/dir names with the following snippet:

> Find.find(wd) do |item| # Subordinate file/directory fully-qualified
> names
> if File.directory?(item)
> # Process directory name
> if item =~ /portfolio/i
> item_saved = ' ' + item
> item.gsub!(/portfolio/, 'position')

> When I saved item in item_saved without modification, the gsub change
> both the item name as well as the saved name (because what was saved
> was a reference to item, not item's content). So my work-around was
> to save a modified name. That doesn't seem like "The Ruby Way".
> What's a better way?

Leave item alone and store the new name in a new variable:

if ...
new_item = item.gsub(/portfolio/, 'position')

(notice the missing "!")

> Q. 2: In that same snippet, I made two substitutions:

> item.gsub!(/portfolio/, 'position')
> item.gsub!(/Portfolio/, 'Position')

> That's also a kluge. But the following didn't compile:

> item.gsub!(/([pP])ortfolio/, $1 + 'osition')

This cannot work because $1 is evaluated only once, i.e. before #gsub
is invoked. You need something like Phlip suggested.

item.gsub /([pP])ortfolio/, '\\1osition'

> Is there a "Ruby Way" to reduce the redundancy?

Yes.

Cheers

robert

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

Hi Gentlemen,

I just want to add that I tried both your suggestions and they worked
perfectly.

Again, many thanks,
Richard

···

On Jul 30, 3:33 am, Robert Klemme <shortcut...@googlemail.com> wrote:

2008/7/30 RichardOnRails <RichardDummyMailbox58...@uscomputergurus.com>:

> Hi,

> Q.1: I was processing file/dir names with the following snippet:

> Find.find(wd) do |item| # Subordinate file/directory fully-qualified
> names
> if File.directory?(item)
> # Process directory name
> if item =~ /portfolio/i
> item_saved = ' ' + item
> item.gsub!(/portfolio/, 'position')

> When I saved item in item_saved without modification, the gsub change
> both the item name as well as the saved name (because what was saved
> was a reference to item, not item's content). So my work-around was
> to save a modified name. That doesn't seem like "The Ruby Way".
> What's a better way?

Leave item alone and store the new name in a new variable:

if ...
new_item = item.gsub(/portfolio/, 'position')

(notice the missing "!")

> Q. 2: In that same snippet, I made two substitutions:

> item.gsub!(/portfolio/, 'position')
> item.gsub!(/Portfolio/, 'Position')

> That's also a kluge. But the following didn't compile:

> item.gsub!(/([pP])ortfolio/, $1 + 'osition')

This cannot work because $1 is evaluated only once, i.e. before #gsub
is invoked. You need something like Phlip suggested.

item.gsub /([pP])ortfolio/, '\\1osition'

> Is there a "Ruby Way" to reduce the redundancy?

Yes.

Cheers

robert

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