sermon 110yen ika 110yen engawa 180yen tuna 110yen negitoro 110yen tako 110yen akagai 180yen anago 180yen tekkamaki 110yen hamachi 180yen sayori 180yen chutoro 180yen kanburi 240yen ikura 240yen uni 240yen ootoro 300yen ebi 300yen
以下の手順でプログラムを作成していく。
############## program ################### open("sushi.dat", "r") do |neta| while line = neta.gets print line end end ############### end ########################実行するとそのまま画面に表示される。
############## program ################### menu = [] # 配列を用意 open("sushi.dat", "r") do |neta| i = 0 # インクリメント用変数 while line = neta.gets print line menu[i] = line # 配列に代入 i += 1 # iの値を増加させる end end p menu # 配列を表示させている # p はメソッド表示コマンド ############### end #######################実行結果は以下のようになる。
sermon 110yen ika 110yen engawa 180yen tuna 110yen negitoro 110yen tako 110yen akagai 180yen anago 180yen tekkamaki 110yen hamachi 180yen sayori 180yen chutoro 180yen kanburi 240yen ikura 240yen uni 240yen ootoro 300yen ebi 300yen ["sermao 110yen\n", "ika 110yen\n", "engawa 180yen\n", " tuna 110yen\n", "negitoro 110yen\n", "tako 110yen\n", "ak agai 180yen\n", "anago 180yen\n", "tekkamaki 110yen\n", "hama chi 180yen\n", "sayori 180yen\n", "chutoro 180yen\n", "kanburi 240yen\n", "ikura 240yen\n", "uni 240yen\n", "ootoro 300yen\n", "ebi 300yen\n"] 最後に表示されたのが配列。"\n" と言うのは、改行コードでそのまま表示され ている。
if /(\w+)\s+(\d+)yen/ =~ line menu[i] = $1 price[i] = $2.to_i printf("%3d %s", i, line) end "if /(\w+)\s+(\d+)yen/ =~ line"は何を意味しているか。 それぞれの記号の意味は、以下の通り。 \w : 英数字と _ (オプションによっては日本語も含む) + : 直前の表現の1回以上の繰り \s : スペース \d : 数字 ( ) : グルーピング $1,$2 : 正規の中で、( ) で囲われた部分が順番に変数 $1, $2, $3....に 代入されていく。
###################### program ############################ menu = [] # 配列を用意 price = [] ## 新たに価格用の配列用意 open("sushi.dat", "r") do |neta| i = 0 # インクリメント用変数 while line = neta.gets if /(\w+)\s+(\d+)yen/ =~ line ## if -- end までが menu[i] = $1 ## 上記の説明の部分 price[i] = $2.to_i printf("%3d %s", i, line) end # print line ## コメントアウト # menu[i] = line # 配列に代入 ## コメントアウト i += 1 # iの値を増加させる end end p menu # 配列を表示させている p price ## 配列を新たに表示させている # p はメソッド表示コマンド ######################### end #############################
プログラムの最後に sum = 0 for n in 0..price.length-1 sum = sum + price[n] end printf("ネタの合計は %d 円です。\n", sum) を付け加える。 "price.length" は配列の大きさを与えている。 配列は "0"からはじまり、0,1,2,3... と指定するので、要素の数は price.length-1 個である。 ###################### program ############################ menu = [] # 配列を用意 price = [] ## 新たに価格用の配列用意 open("sushi.dat", "r") do |neta| i = 0 # インクリメント用変数 while line = neta.gets if /(\w+)\s+(\d+)yen/ =~ line ## if -- end までが menu[i] = $1 ## 上記の説明の部分 price[i] = $2.to_i printf("%3d %s", i, line) end # print line ## コメントアウト # menu[i] = line # 配列に代入 ## コメントアウト i += 1 # iの値を増加させる end end p menu # 配列を表示させている p price ## 配列を新たに表示させている # p はメソッド表示コマンド sum = 0 ### 合計用の変数 for n in 0..price.length-1 sum = sum + price[n] end printf("ネタの合計は %d 円です。\n", sum) ######################### end #############################
for n in 0..price.length-1 printf("%d \n",price[n]) end
s = open("nedan.dat", "w") for n in 0..price.length-1 s.printf("%d \n",menu[n]) end s.close