Adding anotehr each method to String

f it doesn't exist allready, i'd like to add another each method to
String similar to each_byte except it loops over chars for example :

"zero".each_char{|c| puts c}

would print-out :
z
e
r
o

i know how to add a new method to a given class, what i don't know is
specifically for methods like each which pass an arg to a given block...

···

--
It's easy to play any musical instrument: all you have to do is
touch the right key at the right time and the instrument will
play itself. -- J.S. Bach

What you need is "yield".

This does what you need:

class String
  def each_char
    0.upto(self.length - 1) do |x|
      yield self[x,1]
    end
  end
end

yield passes a value to a block.

···

On Mar 25, 2:20 am, unbewusst.s...@wortanschahung.com.invalid (Une Bévue) wrote:

f it doesn't exist allready, i'd like to add another each method to
String similar to each_byte except it loops over chars for example :

"zero".each_char{|c| puts c}

would print-out :
z
e
r
o

i know how to add a new method to a given class, what i don't know is
specifically for methods like each which pass an arg to a given block...

--
It's easy to play any musical instrument: all you have to do is
touch the right key at the right time and the instrument will
play itself. -- J.S. Bach

Might not do what you expect.
  under current conditions you might get:
¨
u

instead of
ü

···

On Mar 25, 2007, at 4:25 PM, Une Bévue wrote:

f it doesn't exist allready, i'd like to add another each method to
String similar to each_byte except it loops over chars for example :

"zero".each_char{|c| puts c}

would print-out :
z
e
r
o

i know how to add a new method to a given class, what i don't know is
specifically for methods like each which pass an arg to a given block...

--
It's easy to play any musical instrument: all you have to do is
touch the right key at the right time and the instrument will
play itself. -- J.S. Bach

Hi,

"zero".each_char{|c| puts c}

would print-out :
z
e
r
o

The split method was already proposed.

  "another".split //
  "another".split ""
  "another".scan /./
  "änöthér".scan /./u # will preserve UTF-8 characters

  "another".each_byte { |x| c = x.chr ; ... }
  "another".unpack( "C*")
  "änöthér".unpack( "U*")

Bertram

···

Am Sonntag, 25. Mär 2007, 16:25:05 +0900 schrieb Une Bévue:

--
Bertram Scharpf
Stuttgart, Deutschland/Germany
http://www.bertram-scharpf.de

#!/usr/bin/env ruby -wKU

require "jcode"

"zero".each_char { |chr| p chr }
# >> "z"
# >> "e"
# >> "r"
# >> "o"

__END__

James Edward Gray II

···

On Mar 25, 2007, at 2:25 AM, Une Bévue wrote:

f it doesn't exist allready, i'd like to add another each method to
String similar to each_byte except it loops over chars for example :

"zero".each_char{|c| puts c}

would print-out :
z
e
r
o

Ok, fine thanks a lot !

does the method :
String.to_a doing :

s="a string"
sa=s.to_a
#=> ['a',' ','s','t','r','i','n','g']

exists allready ?

generally speaking how to list-out, for a given class all the methods ?

in order to avoid collapsing them.

···

Chris Shea <cmshea@gmail.com> wrote:

What you need is "yield".

This does what you need:

class String
  def each_char
    0.upto(self.length - 1) do |x|
      yield self[x,1]
    end
  end
end

yield passes a value to a block.

--
It's easy to play any musical instrument: all you have to do is
touch the right key at the right time and the instrument will
play itself. -- J.S. Bach

then, u mean, it wouldn't work with NON-ASCII chars ?

it doesn't matter in fact because i'm playing with US-ASCII chars only
in that case.

but thanks a lot, better to know !

···

John Joyce <dangerwillrobinsondanger@gmail.com> wrote:

Might not do what you expect.
  under current conditions you might get:
¨
u

instead of
ü

--
It's easy to play any musical instrument: all you have to do is
touch the right key at the right time and the instrument will
play itself. -- J.S. Bach

thanks to all !

···

James Edward Gray II <james@grayproductions.net> wrote:

#!/usr/bin/env ruby -wKU

require "jcode"

"zero".each_char { |chr| p chr }
# >> "z"
# >> "e"
# >> "r"
# >> "o"

__END__

--
Une Bévue

I mean you should check into the way Ruby works with multi-byte characters!
But this should be watched carefully with every language.
Typing multibyte characters on many windows systems is a pain in the behind. Luckily it's not so painful on osx, so I can type an umlaut by option+u then the character I want it over.
Here is what happens...

irb(main):001:0> mystring ="\303\274mlaut"
=> "\303\274mlaut"
irb(main):002:0> puts mystring
ümlaut
=> nil
irb(main):003:0> puts mystring.length
7
=> nil

···

On Mar 25, 2007, at 5:25 PM, Une Bévue wrote:

John Joyce <dangerwillrobinsondanger@gmail.com> wrote:

Might not do what you expect.
  under current conditions you might get:
¨
u

instead of
ü

then, u mean, it wouldn't work with NON-ASCII chars ?

it doesn't matter in fact because i'm playing with US-ASCII chars only
in that case.

but thanks a lot, better to know !
--
It's easy to play any musical instrument: all you have to do is
touch the right key at the right time and the instrument will
play itself. -- J.S. Bach

Ok, fine thanks a lot !

does the method :
String.to_a doing :

s="a string"
sa=s.to_a
#=> ['a',' ','s','t','r','i','n','g']

exists allready ?

irb(main):001:0> "a string".split( "" )
=> ["a", " ", "s", "t", "r", "i", "n", "g"]

generally speaking how to list-out, for a given class all the methods ?

irb(main):002:0> "a string".methods.sort
=> ["%", "*", "+", "<", "<<", "<=", "<=>", "==", "===", "=~", ">", ">=", "", "
=", "__id__", "__send__", "all?", "any?", "between?", "capitalize", "capitaliz
e!", "casecmp", "center", "chomp", "chomp!", "chop", "chop!", "class", "clone",
"collect", "concat", "count", "crypt", "delete", "delete!", "detect", "display",
"downcase", "downcase!", "dump", "dup", "each", "each_byte", "each_line", "each
_with_index", "empty?", "entries", "eql?", "equal?", "extend", "find", "find_all
", "freeze", "frozen?", "gem", "grep", "gsub", "gsub!", "hash", "hex", "id", "in
clude?", "index", "inject", "insert", "inspect", "instance_eval", "instance_of?"
, "instance_variable_defined?", "instance_variable_get", "instance_variable_set"
, "instance_variables", "intern", "is_a?", "is_binary_data?", "is_complex_yaml?"
, "kind_of?", "length", "ljust", "lstrip", "lstrip!", "map", "match", "max", "me
mber?", "method", "methods", "min", "next", "next!", "nil?", "object_id", "oct",
"partition", "private_methods", "protected_methods", "public_methods", "reject"
, "replace", "require", "require_gem", "respond_to?", "reverse", "reverse!", "ri
ndex", "rjust", "rstrip", "rstrip!", "scan", "select", "send", "singleton_method
s", "size", "slice", "slice!", "sort", "sort_by", "split", "squeeze", "squeeze!"
, "strip", "strip!", "sub", "sub!", "succ", "succ!", "sum", "swapcase", "swapcas
e!", "taguri", "taguri=", "taint", "tainted?", "to_a", "to_f", "to_i", "to_s", "
to_str", "to_sym", "to_yaml", "to_yaml_properties", "to_yaml_style", "tr", "tr!"
, "tr_s", "tr_s!", "type", "unpack", "untaint", "upcase", "upcase!", "upto", "zi
p"]

:wink:

Hope that helps,
-Harold

···

On 3/25/07, Une Bévue <unbewusst.sein@wortanschahung.com.invalid> wrote:

Yes, following :

ms=String.methods
puts ms.include?('to_a')

however :
s='toto'
s.to_a
# => ['toto']

···

Une Bévue <unbewusst.sein@wortanschahung.com.invalid> wrote:

exists allready ?

--
It's easy to play any musical instrument: all you have to do is
touch the right key at the right time and the instrument will
play itself. -- J.S. Bach

I mean you should check into the way Ruby works with multi-byte
characters!

because i'm a french guy, i knew that )))

but, as writen, for such a tiny script I'll restrict to US-ASCII
converting :

grüß

to

gruess

if y would be a german guy )))

in french it's easier i'll convert all the :

éèêë to e und so weiter !

i'll have to check (as for the german ß) for ligatures too :

æ -> ae again und so weiter !

thanks !

···

John Joyce <dangerwillrobinsondanger@gmail.com> wrote:

But this should be watched carefully with every language.
Typing multibyte characters on many windows systems is a pain in the
behind. Luckily it's not so painful on osx, so I can type an umlaut
by option+u then the character I want it over.
Here is what happens...

irb(main):001:0> mystring ="\303\274mlaut"
=> "\303\274mlaut"
irb(main):002:0> puts mystring
ümlaut
=> nil
irb(main):003:0> puts mystring.length
7
=> nil

--
It's easy to play any musical instrument: all you have to do is
touch the right key at the right time and the instrument will
play itself. -- J.S. Bach

irb(main):001:0> "a string".split( "" )
=> ["a", " ", "s", "t", "r", "i", "n", "g"]

OK fine, then no need to extend String )))

> generally speaking how to list-out, for a given class all the methods ?
>

irb(main):002:0> "a string".methods.sort => ["%", "*", "+", "<", "<<",
"<=", "<=>", "==", "===", "=~", ">", ">=", "", " =", "__id__",
"__send__", "all?", "any?", "between?", "capitalize", "capitaliz e!",
"casecmp", "center", "chomp", "chomp!", "chop", "chop!", "class", "clone",
"collect", "concat", "count", "crypt", "delete", "delete!", "detect",
"display", "downcase", "downcase!", "dump", "dup", "each", "each_byte",
"each_line", "each _with_index", "empty?", "entries", "eql?", "equal?",
"extend", "find", "find_all ", "freeze", "frozen?", "gem", "grep", "gsub",
"gsub!", "hash", "hex", "id", "in clude?", "index", "inject", "insert",
"inspect", "instance_eval", "instance_of?" , "instance_variable_defined?",
"instance_variable_get", "instance_variable_set" , "instance_variables",
"intern", "is_a?", "is_binary_data?", "is_complex_yaml?" , "kind_of?",
"length", "ljust", "lstrip", "lstrip!", "map", "match", "max", "me mber?",
"method", "methods", "min", "next", "next!", "nil?", "object_id", "oct",
"partition", "private_methods", "protected_methods", "public_methods",
"reject" , "replace", "require", "require_gem", "respond_to?", "reverse",
"reverse!", "ri ndex", "rjust", "rstrip", "rstrip!", "scan", "select",
"send", "singleton_method s", "size", "slice", "slice!", "sort",
"sort_by", "split", "squeeze", "squeeze!" , "strip", "strip!", "sub",
"sub!", "succ", "succ!", "sum", "swapcase", "swapcas e!", "taguri",
"taguri=", "taint", "tainted?", "to_a", "to_f", "to_i", "to_s", " to_str",
"to_sym", "to_yaml", "to_yaml_properties", "to_yaml_style", "tr", "tr!" ,
"tr_s", "tr_s!", "type", "unpack", "untaint", "upcase", "upcase!", "upto",
"zi
p"]

:wink:

Hope that helps,

Yes a lot, thanks again !

···

Harold Hausman <hhausman@gmail.com> wrote:
--
It's easy to play any musical instrument: all you have to do is
touch the right key at the right time and the instrument will
play itself. -- J.S. Bach

This is because in Ruby a String doesn't act as a collection of
characters, it acts as a collection of lines.

s = "to\nto"
s.to_a => ["to\n", "to"]

"to\nto".each {|l| puts l}
to

···

On 3/25/07, Une Bévue <unbewusst.sein@wortanschahung.com.invalid> wrote:

Une Bévue <unbewusst.sein@wortanschahung.com.invalid> wrote:

>
> exists allready ?

Yes, following :

ms=String.methods
puts ms.include?('to_a')

however :
s='toto'
s.to_a
# => ['toto']

--
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/

"a string".split(//)

T.

···

On Mar 25, 6:00 am, unbewusst.s...@wortanschahung.com.invalid (Une Bévue) wrote:

Harold Hausman <hhaus...@gmail.com> wrote:

> irb(main):001:0> "a string".split( "" )
> => ["a", " ", "s", "t", "r", "i", "n", "g"]

> s='toto'
> s.to_a
> # => ['toto']

This is because in Ruby a String doesn't act as a collection of
characters, it acts as a collection of lines.

s = "to\nto"
s.to_a => ["to\n", "to"]

To be pedantic, it's not really a collection of lines. It's a
collection of stuff-terminated-by-some-arbitrary-character-sequence.
The global variable $/ holds this special string:

$/

=> "\n"

s = "foo-bar\njim-jam"

=> "foo-bar\njim-jam"

s.to_a

=> ["foo-bar\n", "jim-jam"]

$/ = '-'

=> "-"

s.to_a

=> ["foo-", "bar\njim-", "jam"]

$/ = "bar"

=> "bar"

s.to_a

=> ["foo-bar", "\njim-jam"]

···

On Mar 26, 4:53 pm, "Rick DeNatale" <rick.denat...@gmail.com> wrote:

On 3/25/07, Une Bévue <unbewusst.s...@wortanschahung.com.invalid> wrote:

I think that a better name for
"stuff-terminated-by-some-arbitrary-character-sequence" would be
record. At least the 'english' library seems to think so since it
aliases $RS and $INPUT_RECORD_SEPARATOR to $/

···

On 3/26/07, Phrogz <gavin@refinery.com> wrote:

On Mar 26, 4:53 pm, "Rick DeNatale" <rick.denat...@gmail.com> wrote:
> On 3/25/07, Une Bévue <unbewusst.s...@wortanschahung.com.invalid> wrote:
> > s='toto'
> > s.to_a
> > # => ['toto']
>
> This is because in Ruby a String doesn't act as a collection of
> characters, it acts as a collection of lines.
>
> s = "to\nto"
> s.to_a => ["to\n", "to"]

To be pedantic, it's not really a collection of lines. It's a
collection of stuff-terminated-by-some-arbitrary-character-sequence.
The global variable $/ holds this special string

--
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/