- - PR -
ファイルの総行数の取得方法
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-06-07 22:05
すみません、御教授願います。
今以下の事を行おうとしています。 ・CSVファイルを読み込む ・特定列の値を配列に代入する これを実現する方法で、以下がわかりません。 ・CSVファイルの総行数の取得方法 総行数を得るには、1回FileInputStreamで全行回すしかないのでしょうか? 配列を無駄なく使うために、まず総行数を取得してから、FileInputStreamを使いたいのですが、よい方法はないのでしょうか? | ||||||||
|
投稿日時: 2004-06-07 23:00
java.util.ArrayList使いましょう。 Stringオブジェクトを入れたArrayListから配列を取得する場合は 以下のコードでできます。
| ||||||||
|
投稿日時: 2004-06-07 23:00
>配列を無駄なく使う
サイズ可変な コンテナクラスを探しましょういろいろあります。 | ||||||||
|
投稿日時: 2004-06-07 23:01
答えにはなってませんが
私の知る限りでは、他の方法はないですね・・・。 (かなり乏しい知識ですが
もしかして、「はじめにかなり多めの要素数の配列を宣言しておく」みたいなことを 考えられているのでしょうか? であれば、ArrayListとかを使って一旦格納しておいて、全部読み込み終わってから ArrayListを配列に変換すれば、無駄に大きい配列を作る必要はなくなりますが。 #外してたらごめんなさい。 m(__)m <追記> かぶりまくり・・・ (^^) [ メッセージ編集済み 編集者: Cluster 編集日時 2004-06-07 23:04 ] | ||||||||
|
投稿日時: 2004-06-08 00:14
koe様、MMX様、Cluster様、御返事有難う御座います。
取り急ぎですが、御礼言わせてください。 早速アドバイスを踏まえて、やってみます。 解決致しましたら、再度書き込みさせて頂きます。 | ||||||||
|
投稿日時: 2004-06-08 09:16
各列の要素サイズが固定、すなわち、各行のデータサイズが同じCSVなら、(一行のサイズ) * (インデックス)で、データを取り出すことは可能でしょう。
各行のサイズが固定で無いCSVの場合は、一度すべて読み込んでからとなるでしょう。 ファイルサイズがどの程度かはわかりませんが、数KB程度なら、read-bufferの関係上、一度に読み込んだほうが効率的です。数MBに及ぶのであれば、検索効率に優れた構造で永続化するかまたは、DBの検討を行うべきだと思います。 | ||||||||
|
投稿日時: 2004-06-08 15:48
「かずくん」様、御返事有難う御座います。
すみません、再度お助け願います。 CSVファイルの読込後、列毎に代入する際、以下の事が対処できません。 ・列値が、null 以下のソースですと、エラーになります(値がnullの配列参照するため) ArrayList alList_Area_Area = new ArrayList(); ArrayList alList_Area_Town = new ArrayList(); ArrayList alList_Area_Code = new ArrayList(); ArrayList alList_Area_Per = new ArrayList(); // 1行毎に読み込んで処理 while ((line=reader.readLine()) != null) { line = (line + ","); System.out.println(line); // 区切り記号を指定(「,」) String[] csv = line.split(","); // ArrayListに代入 alList_Area_Area.add(csv[0]); alList_Area_Town.add(csv[1]); alList_Area_Code.add((csv[2]+ csv[3])); alList_Area_Per.add(csv[6]); // ここがnull値が多い(最終列) } 「,」区切りにするため、「java.util.regex.split」は使用したいのですが、そうなると配列を使う方法しかわかりません。 「java.util.StringTokenizer」を使用すると、順にしか読み込みができない?ので使用したくないのです。 申し訳ありません。 再度、御迷惑お掛けしますが、御教授願います。 | ||||||||
|
投稿日時: 2004-06-08 17:35
はじめまして。
的外れでしたらごめんなさい。 こんな感じのメソッドをかませば良いのでは? でなくて? private nvlString(String value) { return (null==value)?"":value; } | ||||||||
