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

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

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

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

Q&A

解決済

2回答

1829閲覧

Rubyのunexpected tlDENTIFIER,expecting keyword_endエラー

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

0グッド

0クリップ

投稿2017/01/08 21:58

Rubyの以下のプログラムでunexpected tlDENTIFIER,expecting keyword_endというエラーが出てきます。
ただ、このエラーが著者名、ページ数、発刊年、発刊月、発刊日の行だけに出ていて書籍名で同じエラーが出ていません。
以前にも同じような質問をして二つ目のプログラムに変えて解決したのですが自分のプログラミングは教本を丸写ししたもので、gets.chompとgets.chomp.to_iが使えないのなら買った教本のほとんどが間違っているかと疑ってしまいます。(訂正はありませんでした)
教本ではテキストエディタに関しては軽く触れるぐらいでした。
だから、その設定でミスをしている?のかRubyのバージョンの違いでこうなってるのかなと思っています(本が少し古い)。
ATOMを使っています。
エラーが出る理由を教えてください。

def addBookInfo book_info = BookInfo.new( "", "", 0, Date.new ) print "\n" print "キー: " key = gets.chomp print "書籍名: " book_info.title = gets.chomp print "著者名: " book_info.author = gets.chomp print "ページ数: " book_info.page = gets.chomp.to_i print "発刊年: " year = gets.chomp.to_i print "発刊月: " month = gets.chomp.to_i print "発刊日: " day = gets.chomp.to_i book_info.publish_date = Date.new( year, month, day ) @book_infos[key] = book_info end
def addBookInfo book_info = BookInfo.new( "", "", 0, Date.new ) print "\n" print "キー: " key = gets.chomp.encode("UTF-8") print "書籍名: " book_info.title = gets.chomp.encode("UTF-8") print "著者名: " book_info.author = gets.chomp.encode("UTF-8") print "ページ数: " book_info.page = gets.chomp.encode("UTF-8").tr("0-9","0-9").to_i print "発刊年: " year = gets.chomp.encode("UTF-8").tr("0-9","0-9").to_i print "発刊月: " month = gets.chomp.encode("UTF-8").tr("0-9","0-9").to_i print "発刊日: " day = gets.chomp.encode("UTF-8").tr("0-9","0-9").to_i book_info.publish_date = Date.new( year, month, day ) @book_infos[key] = book_info end

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

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

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

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

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

guest

回答2

0

このファイルの文字コードがUTF-8でないためではないかと思います。
UTF-8で保存して下さい。

投稿2017/01/08 23:53

otn

総合スコア84505

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

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

退会済みユーザー

退会済みユーザー

2017/01/09 06:46

Atomのファイルエンコーディングはutf8になっているのでそこは大丈夫だと思います。
otn

2017/01/09 11:30

プログラムに見た目での文法エラーは無いですし、実際にこのファイルをシフトJIS等で保存して実行すると同じエラーが出ますので、何らかの勘違いがあると思います。よく確認してください。 また、エラーメッセージを省略せず全文載せてください。
退会済みユーザー

退会済みユーザー

2017/01/11 10:24

返信遅くなってすみません。 自己解決しました。 原因はよくわかってません。 親切にありがとうございます。
guest

0

ベストアンサー

前のプログラムの該当箇所を上から下に差し替えたという理解であっているでしょうか?
そのように仮定して、手を加えて実行してみたところ上のエラーは出ませんでした。
私もよくそのエラーを出します。私の場合はだいたいendの数が多かったり少なかったり
することが原因です。
私もAtomを使っています。

Ruby

1require 'date' 2 3class BookInfo 4 def initialize( title, author, page, publish_date ) 5 @title = title 6 @author = author 7 @page = page 8 @publish_date = publish_date 9 end 10 11 attr_accessor :title, :author, :page, :publish_date 12 def to_s 13 "#{@title}, #{@author}, #{@page}, #{@publish_date}" 14 end 15 16 def toFormattedString( sep = "\n" ) 17 "書籍名: #{@title}#{sep}著書名: #{author}#{sep}ページ数: #{@page}ぺ―ジ#{sep}発刊日: #{@publish_date}#{sep}" 18 end 19end 20 21class BookInfoManager 22 def initialize 23 @book_infos = {} 24 end 25 26 def setUp 27 @book_infos["Yamada2005"] = BookInfo.new( 28 "実践アジャイル ソフトウェア開発法とプロジェクト管理", 29 "山田 正樹", 30 248, 31 Date.new( 2005, 1, 25 ) ) 32 @book_infos["Ooba2006"] = BookInfo.new( 33 "入門LEGO MINDSTORMS NXT レゴブロックで動くロボット", 34 "大庭 慎一郎", 35 164, 36 Date.new( 2006, 12, 23 ) ) 37 end 38 39 def addBookInfo 40 book_info = BookInfo.new( "", "", 0, Date.new ) 41 print "\n" 42 print "キー: " 43 key = gets.chomp.encode("UTF-8") 44 print "書籍名: " 45 book_info.title = gets.chomp.encode("UTF-8") 46 print "著者名: " 47 book_info.author = gets.chomp.encode("UTF-8") 48 print "ページ数: " 49 book_info.page = gets.chomp.encode("UTF-8").tr("0-9","0-9").to_i 50 print "発刊年: " 51 year = gets.chomp.encode("UTF-8").tr("0-9","0-9").to_i 52 print "発刊月: " 53 month = gets.chomp.encode("UTF-8").tr("0-9","0-9").to_i 54 print "発刊日: " 55 day = gets.chomp.encode("UTF-8").tr("0-9","0-9").to_i 56 book_info.publish_date = Date.new( year, month, day ) 57 @book_infos[key] = book_info 58 end 59 def listAllBookInfos 60 puts "\n---------------------" 61 @book_infos.each { |key, info| 62 print info.toFormattedString 63 puts "\n----------------------------" 64 } 65 end 66 def run 67 while true 68 print " 69 1.蔵書データの登録 70 2.蔵書データの表示 71 9.終了 72 番号を選んでください(1,2,9) :" 73 74 num = gets.chomp.encode("UTF-8").tr("0-9","0-9").to_s 75 case 76 when '1' == num 77 addBookInfo 78 when '2' == num 79 listAllBookInfos 80 when '9' == num 81 break; 82 else 83 end 84 end 85 end 86 book_info_manager = BookInfoManager.new 87 book_info_manager.setUp 88 book_info_manager.run 89 end

前回のプログラムのうち、該当箇所を入れ替えたものです。
入力したデータは以下のとおりです。

(キー)821227(半角) (書籍名)ももたろう (著者名)山田 鈴木(山田<スペース>鈴木) (ページ数)821(半角) (発刊年)1981(半角) (発刊月)4(半角) (発刊日)6(半角)

この内容で私が実行したところ、エラーは発生しませんでした。
実行結果例

---------------------------- 書籍名: ももたろう 著書名: 山田 鈴木 ページ数: 821ぺ―ジ 発刊日: 1981-04-06 ----------------------------

質問者様はエラーが発生するでしょうか?
もしこれでエラーが発生するようならプログラム
以外に問題があるのかもしれません。

投稿2017/01/09 08:02

編集2017/01/09 09:02
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2017/01/09 08:34

その通りです。 endの数も間違ってません。 何回もファイルを消して初めから書き直してやっているのですが、毎回エラーが出てくじけてます。 `addBookInfo': uninitialized constant BookInfoManager::BookInfo (NameError)というのがコマンドプロンプトで出て、AtomではaddBookInfo内のprint""に unexpected tlDENTIFIER,expecting keyword_endが大量に出ています。 全角スペースもないし、著者名ででるエラーが書籍名ででないのがわからない。
退会済みユーザー

退会済みユーザー

2017/01/09 08:38

プログラム全体を見せていただけるとありがたいです。
退会済みユーザー

退会済みユーザー

2017/01/09 08:41

もし加え差し支えがなければ入力した文字も教えて頂けると、エラーを再現しやすくなると思います。
退会済みユーザー

退会済みユーザー

2017/01/11 10:24

返信遅くなってすみません。 自己解決しました。 原因はよくわかってません。 親切にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問