Skip to content

Preview Ruby 4.1 is a preview. It can change before the final release. Switch to Ruby 4.0 →

instance method

StringIO#putc

(::Numeric | ::String arg0) -> untyped
putc(object) → object

Replaces one or more bytes at position pos with bytes of the given argument; advances the position by the count of bytes written; returns the argument.

StringIO object for 1-byte characters.

Example
strio = StringIO.new('foo')
strio.pos # => 0

With 1-byte argument, replaces one byte:

Example
strio.putc('b')
strio.string    # => "boo"
strio.pos       # => 1
strio.putc('a') # => "a"
strio.string    # => "bao"
strio.pos       # => 2
strio.putc('r') # => "r"
strio.string    # => "bar"
strio.pos       # => 3
strio.putc('n') # => "n"
strio.string    # => "barn"
strio.pos       # => 4

Fills with null characters if necessary:

Example
strio.pos = 6
strio.putc('x') # => "x"
strio.string    # => "barn\u0000\u0000x"
strio.pos       # => 7

With integer argument, replaces one byte with the low-order byte of the integer:

Example
strio = StringIO.new('foo')
strio.putc(70)
strio.string # => "Foo"
strio.putc(79)
strio.string # => "FOo"
strio.putc(79 + 1024)
strio.string # => "FOO"

StringIO object for Multi-byte characters:

Example
greek = 'αβγδε' # Five 2-byte characters.
strio = StringIO.new(greek)
strio.string# => "αβγδε"
strio.string.b        # => "\xCE\xB1\xCE\xB2\xCE\xB3\xCE\xB4\xCE\xB5"
strio.string.bytesize # => 10
strio.string.chars    # => ["α", "β", "γ", "δ", "ε"]
strio.string.size     # => 5

With 1-byte argument, replaces one byte of the string:

Example
strio.putc(' ')       # 1-byte ascii space.
strio.pos             # => 1
strio.string          # => " \xB1βγδε"
strio.string.b        # => " \xB1\xCE\xB2\xCE\xB3\xCE\xB4\xCE\xB5"
strio.string.bytesize # => 10
strio.string.chars    # => [" ", "\xB1", "β", "γ", "δ", "ε"]
strio.string.size     # => 6

strio.putc(' ')
strio.pos             # => 2
strio.string          # => "  βγδε"
strio.string.b        # => "  \xCE\xB2\xCE\xB3\xCE\xB4\xCE\xB5"
strio.string.bytesize # => 10
strio.string.chars    # => [" ", " ", "β", "γ", "δ", "ε"]
strio.string.size     # => 6

With 2-byte argument, replaces two bytes of the string:

Example
strio.rewind
strio.putc('α')
strio.pos             # => 2
strio.string          # => "αβγδε"
strio.string.b        # => "\xCE\xB1\xCE\xB2\xCE\xB3\xCE\xB4\xCE\xB5"
strio.string.bytesize # => 10
strio.string.chars    # => ["α", "β", "γ", "δ", "ε"]
strio.string.size     # => 5

Related: getc, ungetc.

See also #pread #read #pos= #readlines also in 4.0 · 3.4 · 3.3 · 3.2 · 3.1 · 3.0