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

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

ただいまの
回答率

90.47%

  • Ruby

    7968questions

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

rubyの演算出力について

解決済

回答 5

投稿

  • 評価
  • クリップ 0
  • VIEW 691

sanami

score 14

rubyを始めたばかりの初心者です。

質問なのですが、コマンドプロンプトで "ファイル名⁺.rb"の後に数字を入力して
その数字がrbファイル内で変数として演算で使われ最終的な結果が出力されるには
どのように行えばよろしいでしょうか?

説明が下手で申し訳ないのですが詳しく教えていただければ幸いです。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

+1

入力された引数が文字列として格納されているのは ARGV という名前の配列です。
数字を十進整数として扱うのであれば ARGV[0].to_i で十進整数に変換できます。
数字を浮動小数点数として扱うのであれば ARGV[0].to_f で浮動小数点数に変換できます。

ただし引数が入力されていないときには ARGV の値は nil になりますが、
そのときに ARGV[0].to_i の値は 0 になり、 ARGV[0].to_f の値は 0.0 になって
しまいます。ruby のソースコード内で引数が入力されているかどうかをチェックするように
された方がよいと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/02/22 21:14

    ご丁寧に教えていただきありがとうございます♪
    無事引数を上手く扱うことができました。

    差し支えなければまた質問させていただきたいのですが、
    if文でARGVが数値文字列かによって
    例えば数字の3と5の場合は+10を行い、
    文字列がgとpの場合は文字の末尾にpを加えるといったことは可能でしょうか?

    よろしくお願いいたします。

    キャンセル

checkベストアンサー

0

# coding: utf-8

# 2 つの引数が数値の場合は 乗算、
# 2 つの引数が少なくとも1つが文字列の場合は 文末にpを追加、
# それ以外の引数の場合は errorと表示

if ARGV.count == 2
  if /\A\d+\z/ =~ ARGV[0] && /\A\d+\z/ =~ ARGV[1]
    puts ARGV[0].to_i * ARGV[1].to_i
  else
    puts "#{ARGV[0]} #{ARGV[1]} p"
  end
else
  puts 'error'
end
実行例
$ ruby args.rb 10 3
30

$ ruby args.rb a b
a b p

$ ruby args.rb 1
error

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/02/22 23:25

    何度もご回答していただきありがとうございました。
    とても参考になりました。

    また解らないときはご教授お願いします。

    キャンセル

0

takeshi_38ka0 さんの言うとおりですが具体的に書くとこんな感じです。

# add.rb というファイルに保存する
result = ARGV[0].to_i + ARGV[1].to_i
puts "足した結果は #{result} です。"

$ ruby add.rb 12 34
足した結果は 46 です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

... コマンドプロンプト上の引数が数字であれば×10を また引数が文字であれば文字の後ろに”p”を加える ...

# coding: utf-8

if ARGV.size == 1

  if /\A\d+\z/ =~ ARGV[0]
    # 数字が指定されていた場合
    puts ARGV[0].to_i * 10
  else
    # その他
    puts "#{ARGV[0]}p"
  end

end
実行例
ruby args.rb 12
120

$ ruby args.rb 12x
12xp

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/02/22 22:29

    またまた解りやすくご説明ありがとうございます。

    最後にもう一つお聞きしたいのですが、
    先ほど答えていただいたif文形式で
    引数が数値の1か2の場合は乗算、
    引数が文字列のaかbの時は文末にpを追加、
    それ以外の引数の時はerrorと表示したいのですが教えていただけますでしょうか?

    お手数ですがよろしくお願いいたします。

    キャンセル

-1

サンプルを書いてみました。

# coding: utf-8

# 2つの変数で演算を行う。
def calc(a, b)
  a * 100 + b
end

# コマンドラインに指定された数字を変数に保存する。
count = ARGV.size
a = (count > 0)? ARGV[0].to_i : 0
b = (count > 1)? ARGV[1].to_i : 0

# 変数を使って演算する。
result =  calc(a, b)

# 演算結果を出力する。
puts result

実行例を示します。
$ ruby args.rb
0
$ ruby args.rb 1
100
$ ruby args.rb 1 2
102

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/02/22 21:48

    ご丁寧にありあとうございます。
    またコメントまでつけていただきとても解りやすい内容でした。

    ただ私の質問の仕方が悪かったのですが
    コマンドプロンプト上の引数が数字であれば×10を
    また引数が文字であれば文字の後ろに”p”を加えるといった
    数値か文字列かによって処理が変わるif文のようなことは可能でしょうか?

    度々で申し訳ないのですがよろしくお願い致します。

    キャンセル

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

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    erbの意味を教えてください。

    Railsアプリケーションのビューのフォーマットが*.erb.htmlなのはなぜですか? erbはどういう意味でしょうか。

  • 解決済

    ruby多次元配列の応用方法について

    多次元配列の質問について質問させていただきます。 CSVを読み込んだあとの多次元配列の比較方法はどうすればよろしいですか? やりたいことは、問題と答えのCSVを読み込んで、比較

  • 受付中

    Ruby csvについて

    配列の内容をCSVで保存するときの質問です。 ・配列内に含まれている[nil]をどうにかして[ ]or[×]にして保存したいと思っているのですがいまいちやりかたがわかりません。

  • 解決済

    バイナリモードとテキストモード

    io=open("a.txt","w+") io.print("hello,world ramune.\n") io.rewind line=io.gets io=open("a

  • 解決済

    ファイルコピーメソッドについて

    def copy(from,to)   open(from){|input|  open(to,"w"){|output|     output.write(input.read)

  • 解決済

    ファイルの書き込み

    ファイルを読み込んで、そのファイルに他の所から読み込んだ変数と足していって、その最後の結果をウィンドウを閉じるときに、ファイルに保存しておいて、次に実行するときも、その前の続きから

  • 受付中

    CSVファイルの保存について

    スクレイピングをしていて、ファイルを保存したいのですが、エラーが出てしまい保存できません。以下のコードを書いているのですが、これだと保存はできないのでしょうか? CSV.op

  • 解決済

    文章の分け方

    Rubyです。 (例文) INTRODUCE My name is p_g. I am a college student. Mr. K is my teacher

同じタグがついた質問を見る

  • Ruby

    7968questions

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