• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイルの内容を配列に格納したい)

ファイルの内容を配列に格納する方法とは?

このQ&Aのポイント
  • ファイルの内容を配列に格納したい場合、以下の手順で行うことができます。
  • まず、ファイルを読み込みます。
  • 次に、kのインデックスでソートし、配列に格納します。

質問者が選んだベストアンサー

  • ベストアンサー
  • komi1341
  • ベストアンサー率65% (25/38)
回答No.2

やり方はいろいろあると思いますが、例えばインデックス(k)と値を格納するための自作クラスを作ってはいかがでしょう。で、1行読み込むたびにそのクラスのオブジェクトを作って、インデックスと値を覚えさせる。 ファイルの行数はあらかじめ分からないのでしょうか? だとすると値の保持の仕方も工夫が必要になってきます。ArrayListのような可変長リストクラスの使い方はご存知ですか? ご存知であれば、リストを1つ作っておいて上記のオブジェクトをそこに追加していくのが楽だと思います。 で、ソートの仕方については自前で実装するか、上記の自作クラスにComparableを実装させて、という方法があります。速度を気にしないなら、実装も発想も簡単なバブルソートを自前で実装するとか。 http://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/bubble-sort.html Comparableを使うなら下記のようなサイトが参考になるでしょう。 http://www5b.biglobe.ne.jp/~psoft/lesson/sort.html ソースを拝見した限りでは、まだあまりプログラミングに慣れていないようにお見受けします。だとすると、今回お話した a. 各行データの格納方法の検討(配列にするかクラスにするか等) b. 可変長リストの利用 c. ソート を一度に実現するのは大変だと思います。 時間があるのであれば、1つずつ別個に勉強して、最後に1つに合わせて完成、とした方が理解しやすいかもしれません。例えばArrayListの使い方をまず勉強し、int配列をソートするプログラムを作り…という感じですね。一度に手をつけると、エラーが出たときどこがおかしいのか把握しにくくなってしまうので。 あと、ファイルは開いたら閉じる、という癖をつけることをお勧めします。つまりreaderのclose()が必ず呼ばれるようにする、ということですね。

donald_a_d
質問者

お礼

たびたび回答ありがとうございます。 データは結果を保持するためのクラスを作成してArrayListに保存する という方法を使わせていただくことにしました。 また、教えていただいたComparableを実装することでソートも実現できました。 これからはファイルも閉じるように気をつけます。 いろいろアドバイスしていただきありがとうございました。

その他の回答 (1)

  • komi1341
  • ベストアンサー率65% (25/38)
回答No.1

どのあたりが分からないのでしょう。例えばファイル読み込みの方法さえ分からない、というのだと答え方も変わってくるので、もっと具体的に分からないことを書くか、作りかけのソースコードを載せるかした方がいい回答がつきやすいと思いますよ。 以下、文字列処理の部分だけが分からないと仮定します。 1.読み込んだ文字列をString.split()を使って分割。 2.分割結果の2つ目の文字列(k**のはず)の2文字目以降をString.substringで取得。 3.Integer.parseInt()で2.の文字列を数値化。 4.全行の処理が終わったら、3.で得た数値を元にデータをソート。

donald_a_d
質問者

お礼

回答ありがとうございます。 質問慣れしておらず、質問に不備があり申し訳ありません。 また、そういった点を指摘していただきありがとうございました。 回答をもとにやって見たところ1,2については分かったのですが、 3.で得たデータはどのように保持しておけばよいかが分かりません。 また、3.で得たデータをどのように利用してソートをすればよいかが 分からない状態です。 申し訳ありませんが3,4の処理についてもう少し詳しく教えていただけませんか。 タブ、スペースがうまく表示できないので非常にみにくいですが、 現状のソースコードは以下のようになっています。 import java.io.*; public class FileRead { public static void main(String arg[]){ try{ FileReader f = new FileReader("sample_result.txt"); BufferedReader b = new BufferedReader(f); String s; while((s = b.readLine())!=null){ /*1.文字列の分割*/ String[] sarray = s.split(" "); /*2.kのインデックスを取得*/ for(int i = 0; i < sarray.length;i++){ if(i % 3 == 1){ System.out.println(sarray[i].substring(1)); } } } }catch(Exception e){ System.out.println("ファイル読み込み失敗"); } } }

関連するQ&A