希「・・・とまあ、これまで色々と見てきたわけやけど、結局のところデータはソースコードにベタ書きで、結果はコンソールに出すだけやった。色々融通が利かないわけや」
海未「たしかに、処理したい値を毎回ソースコードに書くのも非現実的ですし、結果もファイルに残したいところですね」
凛「凛知ってるよ。結果はelixir idol.exs > result.txt
ってやればいいにゃ」
希「凛ちゃん・・・何も間違ったことは言ってへんよ?けど、そうじゃないんや・・・」
希「まずは標準入出力からいってみよか。出力は、もうずっと使ってるやつや」
1 2 |
IO.puts "ラブアロー☆シュート!" |
凛「一番最初に見たやつだね」
希「これ、ちょっとだけ裏があってな」
1 2 3 |
IO.puts :stdio, "ラブアロー☆シュート!" IO.puts :stderr, "ラブアロー☆シュート!" |
希「引数2つバージョンがあるんよ。:stdio
が標準入出力、:stderr
が標準エラー出力。省略すると標準入出力になる」
海未「普段は気にせず引数なしを使っていればよさそうですね」
希「次は入力」
1 2 3 4 5 6 |
case IO.gets "μ's or A-RISE: " do "μ's\n" -> IO.puts "SUNNY DAY SONG" "A-RISE\n" -> IO.puts "Private Wars" _ -> IO.puts "As Time Goes By" end |
1 2 3 4 |
$ elixir lw.exs μ's or A-RISE: μ's SUNNY DAY SONG |
希「IO.gets
を使うとユーザーの入力を受け取れる。簡単やね」
海未「改行文字が付いてくるのですね」
希「入力も出力も、改行文字はセットや」
希「標準入出力はこれだけや。次、ファイルいくで。sl.txtというファイルを用意して・・・」
1 2 3 4 |
Angelic Angel SUNNY DAY SONG 僕たちはひとつの光 |
希「これを読み込んでみる」
1 2 3 |
setlist = File.read! "sl.txt" IO.puts setlist |
1 2 3 4 5 |
$ elixir lw.exs Angelic Angel SUNNY DAY SONG 僕たちはひとつの光 |
希「以上や」
凛「簡単にゃ!」
希「どんどんいくで。ファイル出力や」
1 2 |
File.write! "coupling.txt", "Hello,星を数えて\n?←HEARTBEAT\nFUTURE STYLE\n" |
1 2 3 4 5 6 |
$ elixir lw.exs $ cat coupling.txt Hello,星を数えて ?←HEARTBEAT FUTURE STYLE |
凛「これも簡単にゃ!」
海未「悩む余地すらないですね」
希「ちょっとだけおまけや。入出力をやるとき、ファイルの操作がついて回るやろ?それを簡単にするのがPathモジュールや」
1 2 3 |
Path.join "umi", "kotori" # umi/kotori Path.expand "~/kotori" # /home/umi/kotori |
希「海未ちゃんのPCにあるkotoriフォルダが・・・」
海未「の、希っ!なぜそれを!!」
希「ウチのスピリチュアルパワーで見抜けないものなんてあらへんよ♪」
希(SSHのパスワード生年月日やったし)
凛「凛知ってるよ。ことりちゃんのPCにはhonokaフォルダがあるにゃ」
海未「え・・・う、うわああああああああああああああああああああああっ!!」
希「泥沼の様相やね・・・」
希「海未ちゃんが駄目っぽいので、あとちょっとやし2人で進めようか」
凛「ちょっと悪いことしちゃった気がするにゃ」
希「Path.join
はOSによって違うパス区切り文字でパスを結合する関数や」
凛「Windowsだと\
だったりLinuxだと/
だったりするんだよね」
希「Path.extend
はパスをフルパスに展開する関数や」
凛「そのまんまだにゃ」
希「今回は簡単だったやろ?」
凛「簡単なわりに使い道は多そうだにゃ!」
希「次回なにしようか」
凛「例外処理とかあったよ」
希「じゃ、そのあたりかな」