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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Ruby

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

Q&A

2回答

1361閲覧

strptime メソッドにおいてInvalid date ArgumentErrorとなる

Masayuki.T

総合スコア8

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Ruby

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

0グッド

0クリップ

投稿2018/05/31 10:58

前提・実現したいこと

Rubyで蔵書管理アプリケーションを作っています。
CSVファイルを使った蔵書管理アプリケーションを実装中に以下のエラーメッセージが発生しました。

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

Traceback (most recent call last): 3: from ex1801.rb:149:in `<main>' 2: from ex1801.rb:121:in `run' 1: from ex1801.rb:79:in `addBookInfo' ex1801.rb:79:in `new': invalid date (ArgumentError)

該当のソースコード

Ruby

1 2 3 # -*- coding: utf-8 -*- 4require 'date' 5 6 class BookInfo 7 8 def initialize(title, author, page, publish_date) 9 @title=title 10 @author=author 11 @page=page 12 @publish_date=publish_date 13 end 14 15 16 attr_accessor :title, :author, :page, :publish_date 17 18 19 def to_csv( key ) 20 "#{key},#{@tittle},#{@author},#{@page},#{@publish_date}\n" 21 end 22 23 24 def to_s 25 "#{@title},#{@author},#{@page},#{@publish_date}" 26 end 27 28 29 30 31 def toFormattedString(sep="\n") 32 "書籍名: #{@title}#{sep}著者名: #{@author}#{sep}ページ数: #{@page}ページ#{sep}発刊日: #{@publish_date}#{sep}" 33 end 34 end 35 36 37 class BookInfoManager 38 def initialize (filename) 39 40 @csv_fname=filename 41 42 @book_infos={} 43 end 44 45 46 def setUp 47 48 open(@csv_fname, "r:UTF-8") {|file| 49 50 file.each{|line| 51 52 53 key,title,author,page,pdate=line.chomp.split(`,`) 54 55 56 @book_infos[key]= 57 BookInfo.new(title,author,page.to_i,Date.strptime(pdate)) 58 } 59 } 60 end 61 62 63 def addBookInfo 64 65 book_info=BookInfo.new("", "", 0, Date.new) 66 print "\n" 67 print "キー: " 68 key=gets.chomp 69 print "書籍名: " 70 book_info.title=gets.chomp 71 print "著者名: " 72 book_info.author=gets.chomp 73 print "ページ数: " 74 book_info.page=gets.chomp.to_i 75 print "発刊年: " 76 year=gets.chomp.to_i 77 print "発刊月: " 78 month=gets.chomp.to_i 79 print "発刊日: " 80 day=gets.chomp.to_i 81 book_info.publish_date=Date.new(year, month, day) 82 83 84 @book_infos[key]=book_info 85 end 86 87 88 def listAllBookInfos 89 puts "\n--------------------" 90 @book_infos.each{ |key, info| 91 print info.toFormattedString 92 puts "\n--------------------" 93 } 94 end 95 96 97 def saveAllBookInfos 98 99 open(@csv_fname, "w:UTF-8") {|file| 100 @book_infos.each{|key, info| 101 file.print(info.to_csv(key)) 102 } 103 puts "\nファイルへ保存しました" 104 } 105 end 106 107 108 def run 109 while true 110 111 print " 112 1.蔵書データの登録 113 2.蔵書データの表示 114 8.蔵書データをファイルへ保存 115 9.終了 116番号を選んでください(1,2,8,9):" 117 118 119 num=gets.chomp 120 case 121 when '1'==num 122 123 addBookInfo 124 when '2'==num 125 126 listAllBookInfos 127 when'8'==num 128 129 saveAllBookInfos 130 when'9'==num 131 132 break; 133 else 134 135 end 136 end 137 end 138 139end 140 141 142 143 144 145book_info_manager=BookInfoManager.new("book_info.csv") 146 147 148book_info_manager.setUp 149 150 151book_info_manager.run

試したこと

ソースコードで間違っているところがないかのチェック
Invalid date ArgumentError について調べてみた

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

Ruby2.5.1(最新バージョン)
文字エンコードはUTF-8
テキストエディタはVisual Studio Codeを使用

いろいろと調べてみましたがいまいちよくわかりませんでした。
どなたか初心者の私に教えてくださいませんか?

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

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

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

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

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

guest

回答2

0

私も同じところでつまづきました。

Date.strptime(pdate)を

Date.parse(pdate)に変更したら解決できましたがいかがでしょうか?

投稿2019/01/19 08:41

knrdai

総合スコア11

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

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

0

エラーメッセージの通り、日時表現文字列として不正だと言うことでしょう。
プログラムと言うより、データがおかしい、もしくは、データとプログラムが合ってない。
strptimeする前に、putsしてみてください。

あと、何故でたらめなインデントをするのでしょうか??
見にくくないのですか?

投稿2018/05/31 11:35

編集2018/05/31 11:38
otn

総合スコア84499

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問