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)