- PR -

テキストファイルを読み飛ばす方法

1
投稿者投稿内容
bonif
常連さん
会議室デビュー日: 2007/05/25
投稿数: 33
投稿日時: 2007-05-30 14:19
先日は色々とお教えいただき、ありがとうございました。
おかげさまで悩んでいた部分は解決できたのですが、別のところで問題が発生しました。

CSVファイルを読み込んでいるのですが、最初の300行程度を一行単位で読み込んで、無駄な行なので処理を行わずに消しています。
その段階で変なコードを読み込んでいるらしく、正式なデータを取るときに文字化けをしてしまいます。

コードは以下の通りです。

br・・・BufferedReaderの変数

String data=br.readLine();    //一行読み込んでString型の変数に代入
String[] Datas=data.split(","); //CSVファイルの一行を","で分割して配列に入れる
int state=0
switch(state){
case 0:
//行の中から特定の値を見つけるまで何もしない
    //見つかったらstate++;
braek;
case 1:
//本処理・・・・・
}

BufferedReaderのreadLineを使わずにやれば良いんじゃないかなとも思うんですが、
特定の値を探さないといけないので、どうしていいのかわかりません。

どなたかご教授お願いできませんでしょうか
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2007-05-30 14:46
>読み込んでいるらしく
System.out.printlnでもしてみては。

ところで、厳密にはCSVはsplit(",")で分割できませんが、大丈夫なんでしょうか。
bonif
常連さん
会議室デビュー日: 2007/05/25
投稿数: 33
投稿日時: 2007-05-30 14:55
CSVのスライスは、他の方法も確かにあるみたいですが、推奨されてないやら何やらで、splitを使った方がいいと聞いたもので、使ってます。
一応ちゃんと分割できているようです。
AMD286
常連さん
会議室デビュー日: 2007/04/27
投稿数: 23
お住まい・勤務地: 兵庫県
投稿日時: 2007-05-30 15:06
 エンコードは正しく認識・変換されているのでしょうか。
 文字化けしている部分のバイナリデータは調べられました?
bonif
常連さん
会議室デビュー日: 2007/05/25
投稿数: 33
投稿日時: 2007-05-30 15:13
今色々とチェックしてみたところ、自分でもワケがわからない状態になりました。
箇条書きで書くので、わかりにくかったらすみません。

・どうやら文字化けしているところは "・ という風に、半角ダブルクォーテーションと全角中点が書いてあるところ
・一度CSVファイルをメモ帳か何かで開いて上書き保存すると正常に読み込むことができるようになる。


CSVファイルは、"ログファイルをまとめてCSVにする"という働きのアプリケーションから出力された結果です。このアプリケーションは既存のものなので、作り変えることができません。

ということで、ますます混乱してきましたが、とりあえず、AMD286さんが言われたバイナリデータ云々を確認するのを忘れていたので、やってきます。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-05-30 15:53
BufferedReaderをどのように作成していますか?
プログラムが想定している文字コードとCSVファイルの文字コードは合致していますか?
そもそも、文字コードは何を使っていますか?
多バイト文字をsplitの段階で分割してしまってはいませんか?
bonif
常連さん
会議室デビュー日: 2007/05/25
投稿数: 33
投稿日時: 2007-05-30 16:43
お騒がせして申し訳ありませんが、自己解決しました。

シフトJISコードを使っているみたいなのですが、"・"がタダの中点ではなく、割り当てられてないコードだったようです。

なので、文字が出てくる項目をバイト単位で読み込んで、範囲外のコードを読み取った場合に"・"に書き換えるという働きでやってみたいと思います。

mioさん、AMD286さん、nagiseさん。ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)