Skip to content
instance method

StringIO#each_codepoint

() { (::Integer arg0) -> untyped } -> self
() -> ::Enumerator[::Integer, self]
each_codepoint {|codepoint| ... } → self

With a block given, calls the block with each successive codepoint from self; sets the position to end-of-stream; returns self.

Each codepoint is the integer value for a character; returns self:

Example
codepoints = []
strio = StringIO.new('hello')
strio.each_codepoint {|codepoint| codepoints.push(codepoint) }
strio.eof? # => true
codepoints # => [104, 101, 108, 108, 111]
codepoints = []
strio = StringIO.new('тест')
strio.each_codepoint {|codepoint| codepoints.push(codepoint) }
codepoints # => [1090, 1077, 1089, 1090]
codepoints = []
strio = StringIO.new('こんにちは')
strio.each_codepoint {|codepoint| codepoints.push(codepoint) }
codepoints # => [12371, 12435, 12395, 12385, 12399]

Position in the stream matters:

Example
codepoints = []
strio = StringIO.new('こんにちは')
strio.getc # => "こ"
strio.pos  # => 3
strio.each_codepoint {|codepoint| codepoints.push(codepoint) }
codepoints # => [12435, 12395, 12385, 12399]

When at end-of-stream, the block is not called:

Example
strio.eof? # => true
strio.each_codepoint {|codepoint| fail 'Boo!' }
strio.eof? # => true

With no block given, returns a new Enumerator.

Related: StringIO#each_byte, StringIO#each_char, StringIO#each_line.

See also #each_char #each_line #each_byte #eof also in 4.1 · 3.4 · 3.3 · 3.2 · 3.1 · 3.0