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