【Ruby3.x】StringIO::each_line()メソッドの使い方
each_lineメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
each_lineメソッドは、StringIOオブジェクトの内容を1行ずつ繰り返し処理を実行するメソッドです。StringIOオブジェクトは、メモリ上の文字列データをファイルのように扱えるため、このメソッドを使うことで、その文字列データを効率的に行単位で操作できます。
このメソッドにブロックを渡すと、StringIOオブジェクトに格納されている文字列の各行が、順番にブロック引数として渡され、ブロック内の処理が実行されます。たとえば、StringIOオブジェクトが複数の行からなるテキストデータを持っている場合、各行に対して特定の操作を行いたいときに非常に便利です。
ブロックを省略してeach_lineメソッドを呼び出した場合、直接処理を実行するのではなく、Enumeratorオブジェクトを返します。このEnumeratorオブジェクトを使うと、nextメソッドなどで1行ずつ値を取り出したり、他のEnumerableモジュールのメソッドと組み合わせて、より柔軟な処理を実現したりできます。
行の区切り文字は、デフォルトでは改行文字(\n)ですが、引数に任意の文字列を渡すことで、その文字列を行の区切りとして指定することも可能です。これにより、CSVデータなど、改行以外の特定の区切り文字でデータが構成されている場合でも、容易に行単位で処理できるようになります。ファイルI/Oにおける行読み込みと同様の感覚で、メモリ上の文字列を扱う際に活用できるため、テストコードの作成や一時的なデータ処理などで役立ちます。
構文(syntax)
1require 'stringio' 2 3io = StringIO.new("第一行\n第二行\n第三行") 4io.each_line do |line| 5 puts line.chomp 6end
引数(parameters)
sep = $/, chomp: false
- sep = $/ : 区切り文字を指定する文字列。デフォルトは改行文字($/)。
- chomp: false : 各行の末尾から区切り文字を取り除くかどうかを指定する真偽値。trueの場合、取り除かれます。
戻り値(return)
self または Enumerator
StringIOオブジェクト自身、または処理の各要素を順に返すEnumeratorオブジェクトを返します。