- ベストアンサー
データの読み込みについて
data.txt----- kokugo,10,50,33 eigo,80,11,40 rika,10,80,80 -------------- 最近JAVAをはじめたばかりです。 このようなデータがあるのですがこれを 名前 - 国語の得点 - 英語の得点 - 理科の得点 のように格納して表示させたいのですが今詰まっています。 データの読み込みは出来たのですが格納の仕方がさっぱり分からないので教えてください
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
・テキストファイルのデータ構造の説明がない ・表示する際の「名前」に相当するものがテキストファイルに見あたらない。 ・「格納」という言葉をどういう意味で使っているか (読み込んだのならどこかに格納されているのでは?)
その他の回答 (4)
- ngsvx
- ベストアンサー率49% (157/315)
整理すると、 data.txt----- kokugo,10,50,33 eigo,80,11,40 rika,10,80,80 -------------- というデータから、 国 英 理 Aさん-10-80-10 Bさん-50-11-80 Cさん-33-40-80 という表示をするということですか? そうすると、「Aさん」「Bさん」「Cさん」という文字はどこから取得するのでしょうか?
>名前のデータですが・・・このような構造になっています。 いや、名前ってAさん、Bさん、Cさんとかではないの? 出力したい結果って、Aさん、Bさん、Cさん(もちろんこれらの名前は仮称ですよ)の3教科の結果だと思っているのですけど・・・ 出力したい結果は推測できるけど、「Aさん」等の具体的な名前はどこに登録したものを使用するのですか? それとも、名前はプログラム内部で固定出力なのかな?? >分割したものを配列に入れて行けばいいのでしょうか? えーっと、先の回答で String[] data = record.split(","); のdataに1レコード分の情報が配列として既に入っているのですが・・・ 3教科のデータをとりあえず保持したいなら、 line = br.readLine(); String[] kokugo= line.split(","); line = br.readLine(); String[] eigo= line.split(","); line = br.readLine(); String[] rika= line.split(","); とすれば、教科ごとの点数と教科名が配列に保持されます。 あとはループ文を使用して、 出力結果通りにデータを吐き出すだけです。 for(count=1;count <=3;count+){ System.out.println(kokugo[count] + " " + eigo[count] + " " + rika[count]); //上記の出力は点数だけです。名前は何を出すべきかあなたからの提示が無いので、回答できません。 //countを1から始めたのは、配列の先頭には"kokugo"等の点数以外のデータが含まれているためです。 }
- PED02744
- ベストアンサー率40% (157/390)
質問と「回答の補足」に書かれている内容が一致しないので、何をしたいのかわからないのです。 質問には 「『名前』-国語の得点-英語の得点-理科の得点」 と書かれていますよね? ところがANo.2の回答の補足では 「名前 得点 kokugo, 10, 50, 33 eigo, 80, 11, 40 rika, 10, 80, 80 」 となっており、名前=「国語」「英語」「理科」であるように見えるのです。 もし、質問の通りの解が欲しいのだとしたら、kokugo,10,50,33 とは「各個人の国語の得点が羅列されている」と思われるのです。 すると、データが足らない(=各個人の名前(縦の列)がない)ということになるのです。 わかりますでしょうか? データ不足です。 こんな風なデータなら問題ないです。 1行目に個人の名前が入っている Aさん,Bさん,Cさん 2行目からは各科目のデータが入っている kokugo,10, 50, 33 eigo,80, 11, 40 rika,10, 80, 80 これなら、 Aさん-10-80-10 Bさん-50-11-80 Cさん-33-40-80 と表現することができるので、質問の内容を満たせますが。 初心者との事ですが、もっと落ち着いて 「何が求められているのか」「求められているものを導くには何が必要なのか」 を考えるようにしてください。コーディング以前の所でつまづいておられるようです。
補足
回答ありがとうございます。 書き方があいまいでした。 PED02744さんのおっしゃられている通りです。 国 英 理 Aさん-10-80-10 Bさん-50-11-80 Cさん-33-40-80 のデータになっています。 もうちょっと分かりやすく自分のデータも修正しようと思います。
>データの読み込みは出来たのですが格納の仕方がさっぱり分からないので ファイルを開いてレコードの取得は出来たが、文字列の分解方法がわからないということかな? ファイルから読み込んだ1レコードが String record; に入っていると仮定した場合、 String[] data = record.split(","); でdata配列にはカンマごとに分割したデータが入ります。 参考URL参照。 でも、「名前」のデータはどこにあるの?
補足
回答ありがとうございます 名前のデータですが 名前 得点 kokugo, 10, 50, 33 eigo, 80, 11, 40 rika, 10, 80, 80 -------------- このような構造になっています。少々分かりにくくてすみません。 おかげさまでデータの分割には成功しました。 分割したものを配列に入れて行けばいいのでしょうか?
補足
回答ありがとうございます 読み込んだデータですが String data; StringTokenizer st; data = new File("data.txt"); br = new BufferedReader(new FileReader(data)); line = br.readLine(); st = new StringTokenizer(line, ","); このような感じでいまのところまでは出来てるのですが どうすれば配列に格納できるのでしょうか?