LoginSignup
0
0

Ruby芸160チャレンジ(#17)標準入力およびファイルへの書き込みを同時に

Last updated at Posted at 2023-12-16

この記事は何

shellgei160を通じて言語習得 Advent Calendar 2023に参加しています。

書籍「シェル芸ワンライナー160本ノック」の例題をRubyで解いてみて、Rubyの学習に役立てようとするものです。

例題はこちらのリポジトリで公開されているものに限ります。
https://github.com/shellgei/shellgei160

実行環境など

  • Docker image: ruby:3.0.2
  • 上記リポジトリをクローンした上で、リポジトリのルートディレクトリ直下にanswer-rubyディレクトリを作り、その中に解答となるファイルを作成していきます。

今回のテーマ

$ while read ln ; do echo $ln ; done < /etc/passwd > ~/a

/etc/passwdから一行ずつ読み取り、標準入力とファイル(~/a)への書き込みを同時に行います。

lines = File.open('/etc/passwd', 'r').readlines

File.open('a', 'w') do |f|
  lines.each do |line|
    f.puts line
    puts line
  end
end

所感

  • コードとしての難しさはないが、この処理を行った時のI/Oの効率は気になる。copilotに聞くと、RubyではI/Oは勝手にバッファリングされて効率よく処理されるとのことだが、ユーザー側でそれを把握したり、あるいは明示的に処理を行うにはどうしたら良いだろうか?
  • Goで言うところのTeeWriterがあるともうちょっとしっくりきそう。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0