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

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

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

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

Q&A

解決済

1回答

12179閲覧

splitのundefined method エラーが分かりません

sawadeeeen

総合スコア14

Ruby

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

0グッド

0クリップ

投稿2017/04/22 05:39

###前提・実現したいこと
splitで文字を別々の配列に入れたいのですが、エラーが出てしまいます。

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

エラーメッセージ schedule.rb:10:in `block (2 levels) in <main>': undefined method `split' for 0:F ixnum (NoMethodError) from schedule.rb:9:in `each' from schedule.rb:9:in `block in <main>' from schedule.rb:5:in `each' from schedule.rb:5:in `<main>' 2016/12/30

###該当のソースコード

m,n = gets.split(" ").map(&:to_i) #m,nに入ってる mp = Array.new(m) np = Array.new(n) for i in 0..m-1 do mp[i] = gets.split(" ") mp[i][0] = mp[i][0].to_i puts mp[i][1] for j in 1..mp[i][0] do m[i][j] = m[i][j].split("/") puts [i][j] end end

###試したこと
配列に何も入っていないかと思って確認はしたのですが、中身はあるみたいですが、なぜかエラーが止まらなかったです。
###補足情報(言語/FW/ツール等のバージョンなど)
rubyです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

splitは文字列にしか使えなかったと思います。

Ruby

1str1 = "2\s2" 2str2 = "1 2020/03/30 3 2 2020/03/30 2019/10/03 4 1 2020/03/30 5 1 2020/03/30" 6m,n = str1.split("\s").map(&:to_i) #m,nに入ってる 7 8mp = Array.new(m) 9np = Array.new(n) 10 11for i in 0..m-1 do #2回繰り返し 12 mp[i] = str2.split(" ") #str2が2回入力される 13 mp[i][0] = mp[i][0].to_i 14 puts mp[i][1] 15 for j in 1..mp[i][0] do #1回だけ 16 mp[i][j] = mp[i][j].split("/") 17 puts mp[i][j] 18 end 19end

これで動くと思います。
実行結果例

Ruby

12020/03/30 22020 303 430 52020/03/30 62020 703 830

カレンダー

Ruby

1#encoding: utf-8 2input = "2 2 3 1 2020/03/30 4 2 2020/03/30 2019/10/03 5 1 2020/03/30 6 1 2020/03/30" 7 8 9input = input.split("\n").map{|e| e.split("\s")} 10input.shift 11 12input.map! do |element| 13 element.shift 14 element 15end 16 17input.map! do |element| 18 tmp = [] 19 element.each do |ee| 20 tmp << ee.split("/") 21 end 22 [element, tmp] 23end 24 25input.each do |element| 26 puts element.shift.join("\t") 27 element = element.flatten(1).transpose 28 element[0].map!{|e| e + "年"} 29 element[1].map!{|e| e + "月"} 30 element[2].map!{|e| e + "日"} 31 32 puts element.map{|e| e.join("\t\t")} 33 puts "-" * 20 34 puts "" 35end

実行結果例

2020/03/30 2020年 03月 30日 -------------------- 2020/03/30 2019/10/03 2020年 2019年 03月 10月 30日 03日 -------------------- 2020/03/30 2020年 03月 30日 -------------------- 2020/03/30 2020年 03月 30日 --------------------

投稿2017/04/22 06:42

編集2017/04/22 08:29
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

sawadeeeen

2017/04/22 06:54

m[i][j]は文字列ではないのでしょうか??
退会済みユーザー

退会済みユーザー

2017/04/22 07:13 編集

入力値を教えていただければ、より詳しく分かると思います。 あと恐らくputs [i][j]は誤字です。
sawadeeeen

2017/04/22 07:16

2 2 1 2020/03/30 2 2020/03/30 2019/10/03 1 2020/03/30 1 2020/03/30 というような入力です。 ご指摘ありがとうございます。
退会済みユーザー

退会済みユーザー

2017/04/22 07:33 編集

getsが2箇所かつ2回目がループの中にありますが 入力する順番を教えてください。 とりあえず雰囲気でやってみました。 m[i][j]は0でした。mは恐らく2という数値だと思います。
sawadeeeen

2017/04/22 08:31

すみません。 すごく単純なミスでしたm(__)m 応用例までありがとうございます。 解決しました。
退会済みユーザー

退会済みユーザー

2017/04/22 08:32

いえいえ。こちらこそありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問