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

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

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

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

Q&A

解決済

1回答

1070閲覧

rubyでカンマ区切りの行列を読み込んで(変数に落として)書き出したい

spu

総合スコア23

Ruby

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

1グッド

1クリップ

投稿2019/02/22 08:48

編集2019/02/22 08:55

ruby始めたばかりです。

前提・実現したいこと

カンマで区切られたデータ配列のファイル(sample.txt)、列ごとに変数として落とし込みたいです。

以下sample.txtの内容
1行目:#一列目時間t[s],二列目変数y[-],三列目変数x[-]
2行目:1, 10, 3
3行目:2, 8, 4
4行目:3, 7, 4

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

printfで書き出すとTypeError
putsで書き出すと何も書き出さない

該当のソースコード

該当箇所

File.open("sample.txt") do |fs| fs.each do |line| next if /^#/ =~ line t = line[0].split(',') y = line[1].split(',') x = line[2].split(',') printf "%12.3e%12.3e%12.3e\n", t, y, x # puts t, y, x end end

求める結果

1 10 3
2 8 4
3 7 4

(書き出しはあくまで確認で、この後に計算するので、数値として扱いたいです。)
初歩的なミスだと思いますが、読み込み部分も配列の読み方も書き出しもどれが正しくどれが間違っているかもわからず、困り果てています。

ご助言をお願い致します。

DrqYuto👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

lineは文字列なので、line[0]はその先頭1文字です。なので、普通それに対してsplitはしません。

おそらく、line[0]がファイルの1行目だと思ったんでしょうね。

また、splitすると結果は「文字列の配列」です。printf "%12.3e"の引数に渡すのは、浮動小数点数です。

ということで、考え直してみてください。
考え直しても分からなければ、コメントください。

投稿2019/02/22 08:55

otn

総合スコア84423

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

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

spu

2019/02/22 10:07 編集

回答ありがとうございます! splitは取り除き、代わりに「.to_f」を入れ、eはfにして流してみたのですが、なぜか値は全て0.00000000(12.8f)になりました。rubyは数値を読み込む際、何か指定が必要なのでしょうか?(本当のプログラムはマイナスや小数点以下第8位まであるデータを読み込んでいます。)
otn

2019/02/22 13:46 編集

> lineは文字列なので、line[0]はその先頭1文字です。 に対しての考慮をしましたか? > splitは取り除き 入力行をsplitしないといけないのでは? あと、1行目を読み飛ばさないといけないのでは?
spu

2019/02/25 23:17

大分かかってしまいましたが、できました! File.open("sample.dat") do |inFile| inFile.each do |line| next if /^#/ =~ line parts = line.gsub(" ","").split(',') t = parts[0].to_f y = parts[1].to_f x = parts[2].to_f printf "%12.5f%12.8f%12.8f\n", t, y, x end end ありがとうございました。
otn

2019/02/26 00:02

ヒントが少なすぎたかと思いましたが、できて良かったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問