<< 前のエントリトップページ次のエントリ >>
2011年07月25日

ちとバグ取りぃ

コミケビューワーでC80カタログの動作確認したところ
データベース自体はOKだたのだが。。。
チェックリスト取り込みでエラーがぁ(^^;)

原因は、CSV項目内に改行が有るとデータも改行されるのね。。。
ふむぅ
ま〜項目数チェックかけたんだけど
Stringのsplitメッソドだと配列にした際に項目数が減るんだよねぇ
項目の値が無くなった以降の配列が作られない・・・
例えば本来8項目の「,a,,,b,,,」とかだと
"b"までのstrAry[5]となる

ちとCSVの仕様確認しないとなぁ〜
レコード内を1文字ずつ確認処理するかなぁ
処理時間が掛かるけど・・・

現在、ロジックはこんな感じぃ
ま、splitのクセ解ったのは良かったかもぉw

fileream = new FileInputStream(Environment.getExternalStorageDirectory().getPath() + data_dir_s + "/" + cm_chklist);


//memo 日本語文字化け解消は"SJIS"でOK
br = new BufferedReader(new InputStreamReader(fileream,"SJIS"));
String str;

//
//CSVのリターンコードでの行が別れたときに対応
//2011.07.25 追加
String str_1; //2011.07.25 追加

str_1 = "";
int i = 0;

while ((str = br.readLine()) != null) {

str_1 = str_1 + str;

// 1行の各要素をタブ区切り
String[] str1Ary = str_1.split(",");

//レコードがサークル情報のとき(かつページ番号が空白以外)
if(str1Ary[0].equals("Circle") && !str1Ary[3].equals("")){
//21項目より少ないとき 2011.07.25追加
//どうもsplitメソッドを使うと
//項目の値が無くなった以降の配列が作られない・・・
//「,a,,,b,,,」とかだと"b"までのstrAry[5]となる
if(str1Ary.length < 21){
str_1 = str_1 + "\n";
}else{
stmt.bindString(1,str1Ary[1]);
stmt.bindString(2,str1Ary[2]);
stmt.bindString(3,str1Ary[5]);
stmt.bindString(4,str1Ary[6]);
stmt.bindString(5,str1Ary[7]);
stmt.bindString(6,str1Ary[8]);
stmt.bindString(7,str1Ary[10]);
stmt.bindString(8,str1Ary[11]);
stmt.bindString(9,str1Ary[12]);
stmt.bindString(10,str1Ary[13]);
stmt.bindString(11,str1Ary[17]);
stmt.bindString(12,str1Ary[18]);
stmt.bindString(13,str1Ary[19]);
stmt.bindString(14,str1Ary[20]);
stmt.bindString(15,str1Ary[21]);
stmt.bindLong(16, 99999); //2011.7.11追加
stmt.executeInsert();
i++;
str_1 = "";
}
}else{
str_1 = "";
}


}

Toast.makeText(this, "チェックリスト取り込み\n" + i + "件です。", Toast.LENGTH_LONG).show(); //2011.07.25 追加

投稿者:秀at 14:55| さんでープログラム(Android編) | コメント(0) | トラックバック(0)

◆この記事へのトラックバックURL:

http://control.onair-blog.jp/util/tb.php?us_no=1924&bl_id=1924&et_id=188350

◆この記事へのコメント:

※必須