[#16113] Strange idea... exporting from a scope — "Hal E. Fulton" <hal9000@...>

Hello...

33 messages 2001/06/01

[#16364] Re: Garbage Collection? — Michael Davis <mdavis@...>

Windows 2000 and linux (RedHat 6.2). I have run these tests on both OSs.

12 messages 2001/06/09

[#16400] Symbolic Computation III — Mathieu Bouchard <matju@...>

14 messages 2001/06/11

[#16502] Playing with Ruby Syntax (was: Initial thoughts about Ruby From a Smalltalk Programmer) — jweirich@...

Michael> Hi Everyone, I have to say I'm utterly fascinated by Ruby

9 messages 2001/06/15

[#16661] Problem running irb with Ruby 1.6.4 under FreeBSD 4.0 — Bob Alexander <balexander@...>

I've installed Ruby 1.6.4 on a FreeBSD 4.0 machine, and get the

11 messages 2001/06/20

[#16686] opening db files made by apache dbmmanage — Fritz Heinrichmeyer <fritz.heinrichmeyer@...>

14 messages 2001/06/21

[#16801] rb_define_class() vs Class.new() — Kero van Gelder <kero@...4050.upc-d.chello.nl>

Hi,

18 messages 2001/06/23
[#16802] Re: rb_define_class() vs Class.new() — ts <decoux@...> 2001/06/23

>>>>> "K" == Kero van Gelder <kero@d4050.upc-d.chello.nl> writes:

[#16841] RE: national characters is strings — "Aleksei Guzev" <aleksei.guzev@...>

Next week I'll try to rebuild Ruby with Unicode strings. But it would be

15 messages 2001/06/25
[#16842] Re: national characters is strings — matz@... (Yukihiro Matsumoto) 2001/06/25

Hi,

[#16843] Re: national characters is strings — "Aleksei Guzev" <aleksei.guzev@...> 2001/06/25

That's good enough. But I'm afraid this could ( not would ) cause string

[#16868] Something strange with Ruby's inheritance mechanism — Eric Jacoboni <jaco@...>

As Ruby beginner, i try some "canonical" OO scripts. Doing so, I've

14 messages 2001/06/25
[#16873] RE: Something strange with Ruby's inheritance mechanism — "Aleksei Guzev" <aleksei.guzev@...> 2001/06/26

[#16879] Re: Something strange with Ruby's inheritance mechanism — Mathieu Bouchard <matju@...> 2001/06/26

On Tue, 26 Jun 2001, Aleksei Guzev wrote:

[#16869] Something strange with Ruby's inheritance mechanism — Eric Jacoboni <jaco@...>

As Ruby beginner, i try some "canonical" OO scripts. Doing so, I've

12 messages 2001/06/25

[#16881] — "Aleksei Guzev" <aleksei.guzev@...>

32 messages 2001/06/26
[#16916] Re: Method overloading (option) Was: Re: — "Wayne Blair" <wayne.blair@...> 2001/06/26

[#16920] Re: Method overloading (option) Was: Re: — matz@... (Yukihiro Matsumoto) 2001/06/26

Hi,

[#16888] finalizers, destructors and whatnot — "David Leal" <david@...>

Hi all,

16 messages 2001/06/26

[#17037] keeping an Exception object alive — David Alan Black <dblack@...>

Hello --

19 messages 2001/06/28
[#17055] Re: keeping an Exception object alive — matz@... (Yukihiro Matsumoto) 2001/06/29

Hi,

[#17066] RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — David Alan Black <dblack@...> 2001/06/29

Hello --

[#17076] Re: RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — matz@... (Yukihiro Matsumoto) 2001/06/29

Hi,

[#17079] Re: RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — David Alan Black <dblack@...> 2001/06/29

Hello --

[#17138] Re: RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — matz@... (Yukihiro Matsumoto) 2001/07/02

Hi,

[#17141] Re: RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — David Alan Black <dblack@...> 2001/07/02

Hello --

[#17142] Re: RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — ts <decoux@...> 2001/07/02

>>>>> "D" == David Alan Black <dblack@candle.superlink.net> writes:

[ruby-talk:16341] RE: Tcl string map lookalike

From: "Benjamin J. Tilly" <ben_tilly@...>
Date: 2001-06-08 19:27:36 UTC
List: ruby-talk #16341
>===== Original Message From Wilbert Berendsen <wbsoft@xs4all.nl> =====
>Hi,
>
>What's the best way to perfomrs a Tcl-like "string map" function.
>
>Tcl "string map" walks through a string, replacing every occurrence of a
>substring with an associated replacement.  The substrings and replacement
>are in a flat list, and the list is searched from the beginning, so first
>matches precede, eg:
>
>Tcl:
>
>set str "This is a <string$gt;"
>set map [list "<" "<" "<" ">" "<" "<" ">" ">"]
>string map $map $str
>===> "This is a <string>"
>
>Ruby: (????)
>
>str = "This is a string"
>map = ["<", "<", "<", ">", "<", "<", ">", ">"]
>str.map (map)
>===> "This is a <string>"
>
>I tried using gsub with an array and a special regexp, but that's a bit
>cumbersome. Separate gsub's after eachother don't work, because the
>substitutions may again contain matching character which results in
>errors.  So it must do it in one single pass along the string.
>
I am working in Perl right now, so I can give a Perl answer
which should be fairly easy to translate into Ruby.  My
apologies for that.

The usual Perl hack for this is to construct a hash lookup from
string to replacement, and an RE that will only match the keys
of your hash.  Then do a general substitution, using the hash
lookup to get the replacement.

The "5 second" Perl version is:

  sub string_map {
    my ($str, %lookup) = @_;
    my $re_str = join "|", map {quotemeta($_)} reverse sort keys %lookup;
    my $re = qr/($re_str)/;
    $str =~ s/$re/$lookup{$1}/g;
    return $str;
  }

This reverses your desired duplication rule.  (Last one in wins in
building the hash, not the first.)  I also have a longest first
rule.  Normally I figure that if someone has both "foo" and
"foobar", they really want to give the "foobar" rule precedence
over the "foo" rule.  (Hence the reverse sort.)  Finally the
quotemeta handles escaping pesky characters.

The same idea should work perfectly well in Ruby.  But you will
need to do a lot more work (in either Perl or Ruby) if you want
to have TCL's "order-based" precedence of substitutions logic.

Cheers,
Ben

In This Thread

Prev Next