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

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

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

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

Q&A

解決済

1回答

407閲覧

csvファイルを任意の名前にしたい

G23

総合スコア20

Ruby

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

0グッド

0クリップ

投稿2023/11/17 10:01

実現したいこと

rubyを使いcsvファイルを出力する際にファイル名を入力されたファイル名にして出力したい

前提

rubyを使ってcsvファイルで出力するメモアプリのようなものを作成中です。
ファイルを出力する際にファイル名をコンソール上で入力し出力したい。

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

memo.rb:22:in made_memo': undefined local variable or method name' for main:Object (NameError)

エラーメッセージ

該当のソースコード

require "csv"

コンソールで入力

def make_memo
print"出力するコンテンツ:"
contents=gets.chomp
{"contents"=>contents}
end

新規ファイルで出力

def made_memo(memo)
print"ファイル名:"
name=gets.chomp
File.rename("memo.csv",name.csv)
CSV.open(name.csv, "w") do |csv|
csv<<[memo]
end
end

ファイルの末尾に追加

def add_memo(memo)
puts "内容:"
CSV.open(name.csv, "a" ) do |csv|
csv<<[memo]
end
end

memos=[]

while true
puts"新規作成は[1]"
puts"CSVファイルの編集は[2]"
puts"終了は[end]"
mode=gets.chomp

if mode=="1"
memos.push(make_memo)
made_memo(memos)
elsif mode=="2"
memos.push(make_memo)
add_memo(memos)
elsif mode!="1" && mode!="2" && mode!="end"
puts"不明な入力です。再入力して下さい。"
else
mode=="end"
break
end
end

試したこと

名前を入力する用にメソッドを別に記載し試しましたが、同じエラーが出ました。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

最初の方で、

Ruby

1name=gets.chomp 2File.rename("memo.csv",name.csv)

というコードがありますが、nameは、gets.chompした結果の文字列オブジェクト(Stringオブジェクト)が入った変数名です。変数名に.csvをつけると、変数に代入されているオブジェクトのメソッド呼び出しになります。

おそらくやりたいのは「入力した文字列の後に.csvという文字列をつないだ文字列を作りたい」ということでしょうね。
abcと入力したのなら"abc.csv"という文字列を得たい。

分かり易い書き方では、name + ".csv"と書くと、変数nameに代入された文字列の値に、".csv"という文字列を連結した文字列になるので、上記目的の通りになります。文字列に対しての+演算子は、文字列を連結するという意味になります。まずはこう書くと良いでしょう。
入門を終えたレベルの人になると、"#{name}.csv"と書いたりします。

また、変数nameの使い方を見ると、変数の有効範囲についても理解不足のようです。

全体としてどう書き直せば良いかは、仕様がわからないので示せませんが。
もう少し簡単なプログラムで、まずはRubyの文法を十分マスターしてから次に進むのが良いかと思います。

投稿2023/11/17 10:50

otn

総合スコア86295

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

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

G23

2023/11/18 14:05

丁寧に解説していただきありがとうございます。 基本的な考え方が抜けていました。再度基礎を見直して今後に繋げたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問