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

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

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

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

Q&A

解決済

4回答

886閲覧

ruby ファイルを読み込む

simp

総合スコア18

Ruby

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

0グッド

0クリップ

投稿2018/11/27 05:11

編集2018/11/27 06:08
File.open("test.txt","r") do |f| f = f.read puts f puts "平均年齢#{f.sum{r[2]} / f.size}" end

このようなコードを書いてテキストファイルを読み込んだところ、平均年齢を出そうとしたのですが

size,sumが異常に大きい数になってしまいます。

なぜなのでしょうか?

なお、CSVモジュールをつかわないで書きたいです。

テキストファイル

jason m 18 paulo m 20 alice f 15 tom m 17 jorge f 17

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

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

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

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

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

guest

回答4

0

Rubyなど不要。そう、シェル芸ならね!

bash

1$ cat text.txt|awk '{s+=$3}END{print "平均年齢 "s/NR}' 2平均年齢 17.4

投稿2018/11/27 11:08

hichon

総合スコア5737

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

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

0

ベストアンサー

size,sumが異常に大きい数になってしまいます。
なぜなのでしょうか?

f.sizeは読み込んだファイルの文字数です。
f.sumは読み込んだファイルのチェックサムです。
そのため、期待した結果になりません。

>なお、CSVモジュールをつかわないで書きたいです。
使いたくない理由は何でしょうか?
もし、使いたくないなら、1行ずつ読み込み、3列目を加算し、その結果を行数で割って平均をとる必要があります。1行で平均を算出できる機能はありません。

投稿2018/11/28 00:53

tatsu99

総合スコア5424

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

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

0

3つ目の数字を処理するなら、r[3]じゃなくてr[2]ですね。

r[3]だと、4つ目の要素は無いのでnilになり、演算時にエラーになるはずですが。

投稿2018/11/27 05:48

otn

総合スコア84423

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

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

simp

2018/11/27 05:51

すみません。違うコードのっけてました。今、変更しました
otn

2018/11/27 05:54

ちゃんと実行してみてから載せましたか? また間違ってますよ。
simp

2018/11/27 06:09

すいません。変更しました
otn

2018/11/27 11:52 編集

現時点のお書きのコードは、ファイルを構成する文字コードの平均を求めています。 質問の最初のコードで、r[3]をr[2]に変更すれば正しく動きます。
guest

0

期待する結果はこのような感じでしょうか?

test.rb

1require 'csv' 2t = CSV.read("test.csv", converters: :numeric) 3puts "平均年齢 #{t.sum(0.0){|r| r[2]} / t.size}" 4pp t.sort_by{|r| r[2]}

test.csv

1jason,m,18 2paulo,m,20 3alice,f,15 4tom,m,17 5jorge,f,17

出力結果

$ ruby test.rb 平均年齢 17.4 [["alice", "f", 15], ["tom", "m", 17], ["jorge", "f", 17], ["jason", "m", 18], ["paulo", "m", 20]]

投稿2018/11/27 05:41

oh_rusty_nail

総合スコア319

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

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

simp

2018/11/27 05:49

csv使わないで書きたいです
oh_rusty_nail

2018/11/27 05:58

csvを使わないというのはファイル制御なしでということでしょうか? であれば、データベースを使うことで実現できると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問