kuramon01
@kuramon01

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

RubyでCSVに書き込み保存したい

解決したいこと

【RubyでCSVに書き込み保存したい】

RubyでCSVにメモするアプリを作成していて、入力した文字をCSVファイルに保存したいのですが、「CTRL+D」をコマンドしても以下のエラーが出て保存ができません。

「ここを参照しろ」ということかと思うのですが、よくわからず困っています。解決方法を教えて下さい。

発生している問題・エラー

/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/csv.rb:1185:in `<<': wrong number of arguments (given 0, expected 1) (ArgumentError)
	from memo.rb:17:in `block in <main>'
	from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/csv.rb:657:in `open'
	from memo.rb:16:in `<main>'

該当するソースコード

require "csv"

puts "1(新規でメモを作成) 2(既存のメモ編集する)"

## ユーザーの入力を待機
memo_type = gets.to_i
 
if memo_type == 1
  puts "新規でメモを作成します。ファイル名を入力してください"
  file_name = gets.chomp

  puts "メモの内容を記入してください。Ctrl+Dで保存します。"
  imput_memo = $stdin.read 
  memo = imput_memo.chomp

  CSV.open("#{file_name}.csv","w") do |csv|
    csv.puts["#{memo}"]
  end

elsif memo_type == 2
  puts "既存のメモを編集します。拡張子を除いたファイル名を入力してください。"
 # 未作成
else
  puts "1か2を入力してください。"
 # 未作成
end
0

3Answer

wrong number of arguments (given 0, expected 1) (ArgumentError)
引数が1のメソッドに対し値を渡してないからエラーが出ています。

  csv.puts(["#{memo}"])

じゃないですか?

1Like

確かに、Rubyにおいてメソッド呼び出し時の括弧省略は可能です。
(今回は括弧を省略しない形式で回答しましたが)

質問者の方のコードで動作しなかった理由は「単純なミス」です。

- csv.puts["#{memo}"]
+ csv.puts ["#{memo}"]

違いが分かりますでしょうか。

また、捕捉ですが

 # 未作成

のようにコード内に全角スペースを含めるべきではないです。

1Like

Comments

  1. @kuramon01

    Questioner

    ありがとうございます!
    括弧省略可なのは知りませんでした。。勉強不足でした。

    スペースがないとダメなんですね。
    これはこういう法則なのでしょうか?

    補足のご提示ありがとうございます!
    全角が入っているのに気づきませんでした。

Your answer might help someone💌