情報を入力して、整形して出力するように変更したい。 情報を入力して出力するには、3 つの実行文を組み合わせた。 文字列の入力を促す部分と、入力された文字列を切り取る部分、 それに文字列を使って表示や計算をする部分から成り立っていた。
# STDERR.print("入力を促す文章") # 文字列の入力を促す # 変数 = gets.chomp! # 入力された文字列を切り取る
入力された文字列は、数字が並んでいても、文字であった。 計算できるように、数値にするためには、to_i (TO Integer, 整数変換) あるいは to_f (TO Fraction, 小数変換) しなければならない。
# 変数 = gets.chomp!.to_i # 入力された文字列を切り取って整数に変換 # 変数 = gets.chomp!.to_f # 入力された文字列を切り取って小数に変換
#!/usr/koeki/bin/ruby high_name = "流美易高校" # 高校名を変数 high_name に代入する high_grad = 2005 # 高校卒業年を変数 high_grad に代入する STDERR.print("どこの大学に入学しましたか?") univ_name = gets.chomp STDERR.print("西暦何年に入学しましたか?") univ_year = gets.chomp.to_i print("西暦を年号に変換します\n") printf("%s卒業\t%d年 (平成%d年)\n", high_name, high_grad, high_grad - 1988) printf("%s入学\t%d年 (平成%d年)\n", univ_name, univ_year, univ_year - 1988)
切り取った文字数をどのように処理するかによって、値の型変換が変わる。 変数の中身に合わせて printf (PRINT Formatted) の表示も変わる。
# to_i .... %d # 整数値 # to_f .... %f # 小数値 # to_s .... %s # 文字列
小数は、%f の間の数値を工夫しないと「単なる数値の羅列」になるので、 表示の美しさを考えるようにしよう。
本学の文字数と、出身高校の年号を揃えたい。 文字列と文字列の間隔を計算して空けるにはどうすればよいか、思いだそう。
%整数s # 整数分だけ箱を空けて、右詰めに文字列を表示 %整数d # 整数分だけ箱を空けて、右詰めに文字列を表示 %整数.整数f # 全体で空ける箱の数.そのうちの小数点以下の箱の数 %負の整数s # 整数分だけ箱を空けて、左詰めに文字列を表示 %負の整数d # 整数分だけ箱を空けて、左詰めに文字列を表示
全角文字は半角 2 文字分であった 。 学校名の文字列は全角で 20 文字分取ることにし、 左詰めに表示させてみよう。
: printf("%-20s卒業\t%10d年 (平成%2d年)\n", high_name, high_grad, high_grad - 1988) printf("%-20s入学\t%10d年 (平成%2d年)\n", univ_name, univ_year, univ_year - 1988)
実行結果が変化することを確認しよう。
irsv{ta05001}% ./review.rb [~/Ruby] 流美易高校 卒業 2005年 (平成17年) 東北公益文科大学 入学 2008年 (平成20年)
となる。
本日の講義 / 基礎プログラミング II / 2007 年度