質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

441閲覧

品名と価格の出し方(できれば価格の合計も)

rincorn.

総合スコア2

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2020/06/25 06:34

前提・実現したいこと

以下のテキストファイルから品名と価格だけを表示したい
品名 分類コード 商品コード 価格
"モコモコスパゲッティ" 1 16565M 880
"suidou ざ・movie" 5 54110S 3980
"無邪気白熊" 7 74096M 240
"ウィリーCUB" 3 R345 180000
"恋愛大皿左巻き" 2 25924R 54000
(suidouのやつは空白が入っているので""でまとめてやりたいです)

発生している問題・エラーメッセージ

品名と価格の文字は出てくるが、数字が出てこない。

該当のソースコード

Ruby

1require './kprintf.rb' 2 3hinmei=[] 4kakaku=[] 5sum=0 6while kaimono = gets 7 if /^(\s+)\s+(\d+)\s+(\d+)$/ =~ kaimono then 8 hinmei << $1 9 kakaku << $2.to_i 10 end 11end 12i = 0 13print "--品名-----------+-価格--\n" 14while i < kakaku.length 15 printf("%-20s %5d %5.1f \n",himnei[i], kakaku[1]) 16end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YT0014

2020/06/27 08:22 編集

削除するべきとは書きましたが、数字の調整をするべき、とは書いていません。 削除前のコードが正しいのならば、kakaku << $4.to_i のままが正解です。 また、わざわざ指摘しているのだから、ケアレスミスの有無くらい、確認してください。 i(アイ)と1(イチ)は異なるし、変数は勝手に更新されません。 https://teratail.com/questions/272569
rincorn.

2020/06/27 08:20

open("result.txt", "w")do |kaimono| hinmei=[] kakaku=[] sum=0 while kaimono = gets if /\"([^\"]+)\"\s+(\d+)\s+([^\s]+)\s+(\d+)/ =~ kaimono then hinmei << $1 kakaku << $4.to_i end end i = 0 print "--品名--------------+-価格--\n" while i < kakaku.length printf("%-20s %5d \n",hinmei[i], kakaku[i]) i+= 1 end while f < kakaku.sum printf("合計金額は%d円です\n",f) f+= 1 end end このようになったのですが、合計金額が連続で出てきてしまいます。どうすればいいですか?
guest

回答1

0

ベストアンサー

正規表現部分を/\"([^\"]+)\"\s+(\d+)\s+([^\s]+)\s+(\d+)/に変えてやれば
マッチはできるかと思います。

ただし読む時に面倒くさいので私ならば

ruby

1require 'csv' 2gets 3 4CSV.parse(STDIN.read, col_sep: " ").map(&:compact).each do |name, category, code, price| 56end

的にやってしまうかな

投稿2020/06/25 08:19

編集2020/06/25 10:08
asm

総合スコア15149

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rincorn.

2020/06/25 08:42

どこにそれを当てはめればいいですか?
rincorn.

2020/06/25 11:02

--品名-----------+-価格-- Traceback (most recent call last): 3: from ./open4.rb:18:in `<main>' 2: from /home/irhome/c119/c119179/Ruby/kprintf.rb:25:in `printf' 1: from /home/irhome/c119/c119179/Ruby/kprintf.rb:17:in `printf' /home/irhome/c119/c119179/Ruby/kprintf.rb:17:in `sprintf': too few arguments (ArgumentError) このようなエラーが出てしまいました
rincorn.

2020/06/25 17:08

つまり何をすれば…
asm

2020/06/25 17:39

%なんとかの数と引数の数が合っていませんので 何を表示するのか? どう表示するのか?を元に書き直すといいでしょう。
rincorn.

2020/06/26 09:19

直してみたのですが永遠にモコモコスパゲッティ  880としか出てきませんでした
asm

2020/06/26 09:23

> while i < kakaku.length だけではiは変化しないのでwhile-end間にi+=1が必要です。
rincorn.

2020/06/26 09:43

./open4.rb:18: syntax error, unexpected '=' i+ = 1 が出てきました
asm

2020/06/26 09:46

+と=の間に空白を挟んではいけません。+=という1つの演算子になります。 i = i + 1でもよいですが
rincorn.

2020/06/26 10:18 編集

--品名-----------+-価格-- suidou ざ・movie 3980 無邪気白熊 240 ウィリーCUB 180000 恋愛大皿左巻き 54000 Traceback (most recent call last): 3: from ./open4.rb:19:in `<main>' 2: from /home/irhome/c119/c119179/Ruby/kprintf.rb:25:in `printf' 1: from /home/irhome/c119/c119179/Ruby/kprintf.rb:17:in `printf' /home/irhome/c119/c119179/Ruby/kprintf.rb:17:in `sprintf': can't convert nil into Integer (TypeError) もこもこがでなくなりました
asm

2020/06/26 10:56

i+=1の位置が問題ですね。 先にhinmei[i]を表示してやらないとi=0のときの表示がなくなります。 また同様に、iが増えすぎてしまいhinmei[i]がnilになってしまいます。
rincorn.

2020/06/26 11:51

重ね重ね申し訳ないのですが、価格の合計も出したいのですがどうすればよいでしょうか
asm

2020/06/26 15:04

Ruby2.4以降ならばkakaku.sumで出せます それ以前ならば iと同様に、0で初期化された変数を用意してループ毎にkakaku[i]だけ増やしていけばいいのです。
rincorn.

2020/06/27 04:09

多分2.4以降なのですがどこに入れればよ良いのでしょうか
asm

2020/06/27 04:17

表示したい場所次第ですが 末尾でよければ最後のwhile-endを抜けた後でよいかと
rincorn.

2020/06/27 08:18 編集

open("result.txt", "w")do |kaimono| hinmei=[] kakaku=[] sum=0 while kaimono = gets if /\"([^\"]+)\"\s+(\d+)\s+([^\s]+)\s+(\d+)/ =~ kaimono then hinmei << $1 kakaku << $4.to_i end end i = 0 print "--品名--------------+-価格--\n" while i < kakaku.length printf("%-20s %5d \n",hinmei[i], kakaku[i]) i+= 1 end while f < kakaku.sum printf("合計金額は%d円です\n",f) f+= 1 end end これだと合計金額が連続で出てくるんですよ
YT0014

2020/06/27 08:23

whileの意味をご理解ください
rincorn.

2020/06/27 09:02

調べてこのようになったのですが、何が足りないのでしょうか
YT0014

2020/06/27 09:06

Rubyにおいて、whileというのは、何ですか?
rincorn.

2020/06/27 09:12

繰り返しですよね。偽にしない限りループするのはわかるのですが、どう設定すればいいかわかりません
YT0014

2020/06/27 09:24

whileは、処理を行う時、必ず必要なのですか?
rincorn.

2020/06/27 09:29

なるほど!無理に使わなくていいんですね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問