001/* 002 * Copyright (c) 2009 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016package org.opengion.hayabusa.io; 017 018import java.io.BufferedReader; 019import java.util.Map; 020 021import org.opengion.fukurou.util.CSVTokenizer; 022import org.opengion.fukurou.util.ErrorMessage; 023import org.opengion.fukurou.util.StringUtil; 024import org.opengion.hayabusa.common.HybsSystem; 025import org.opengion.hayabusa.db.DBColumn; 026import org.opengion.hayabusa.db.DBTableModel; 027import org.opengion.hayabusa.resource.ResourceManager; 028import org.opengion.hayabusa.resource.CodeData; 029 030/** 031 * 指定の区切り記号(初期値:タブ区切り)ファイルの読み取りクラスです。 032 * 033 * 名前,データの入力部のみオーバーライドすれば,各種入力フォーマットに合わせた 034 * サブクラスを実現する事が可能です。 035 * 036 * @og.group ファイル入力 037 * 038 * @version 4.0 039 * @author Kazuhiko Hasegawa 040 * @since JDK5.0, 041 */ 042public abstract class AbstractTableReader implements TableReader { 043 //* このプログラムのVERSION文字列を設定します。 {@value} */ 044 private static final String VERSION = "5.5.8.5 (2012/11/27)" ; 045 046 private String separator = TAB_SEPARATOR; // 項目区切り文字 047 private ResourceManager resource = null; // 4.0.0 (2005/01/31) 048 private int maxRowCount = HybsSystem.sysInt( "DB_MAX_ROW_COUNT" ) ; 049 050 protected DBTableModel table = null; 051 protected DBColumn[] dbColumn = null; 052 053 // 3.5.4.5 (2004/01/23) カラム名の外部指定を出来る様にする。 054// private String columns = null; // 外部指定のカラム名 055 protected String columns = null; // 外部指定のカラム名 ( 4.3.4.7 (2009/01/22) protectedに変更 ) 056 private String encode = null; 057 private boolean useNumber = true; // 3.7.0.5 (2005/04/11) 058 059 private int skipRowCount = 0; // 5.1.6.0 (2010/05/01) データの読み飛ばし設定 060 private boolean useRenderer = false; // 5.2.1.0 (2010/10/01) 061 062 // 5.2.1.0 (2010/10/01) コードリソース毎のラベル逆引きマップ 063 private Map<?,?>[] maps = null; // 5.5.1.7 (2012/04/16) ワイルドカードを指定 064 065 private boolean useDebug = false; // 5.5.7.2 (2012/10/09) デバッグ情報の出力するかどうか 066 067 // 5.9.8.1 (2016/05/13) match処理追加 068 private String[] matchKeys = null; 069 private String[] matchVals = null; 070 private int[] matchKeysIndex = null; 071 072 /** 073 * DBTableModel から 各形式のデータを作成して,BufferedReader より読み取ります。 074 * コメント/空行を除き、最初の行は、必ず項目名が必要です。 075 * それ以降は、コメント/空行を除き、データとして読み込んでいきます。 076 * このメソッドは、EXCEL 読み込み時に使用します。 077 * 078 * @see #isExcel() 079 */ 080 abstract public void readDBTable(); 081 082 /** 083 * DBTableModel から 各形式のデータを作成して,BufferedReader より読み取ります。 084 * コメント/空行を除き、最初の行は、必ず項目名が必要です。 085 * それ以降は、コメント/空行を除き、データとして読み込んでいきます。 086 * 087 * @param reader BufferedReaderオブジェクト 088 */ 089 abstract public void readDBTable( final BufferedReader reader ); 090 091 /** 092 * リソースマネージャーをセットします。 093 * これは、言語(ロケール)に応じた DBColumn をあらかじめ設定しておく為に 094 * 必要です。 095 * リソースマネージャーが設定されていない、または、所定のキーの DBColumn が 096 * リソースに存在しない場合は、内部で DBColumn オブジェクトを作成します。 097 * 098 * @og.rev 4.0.0.0 (2005/01/31) lang ⇒ ResourceManager へ変更 099 * 100 * @param resource リソースマネージャー 101 */ 102 public void setResourceManager( final ResourceManager resource ) { 103 this.resource = resource; 104 } 105 106 /** 107 * DBColumn オブジェクトをDBTable に設定します。 108 * 109 * @og.rev 3.5.4.2 (2003/12/15) private を protected に変更。 110 * @og.rev 3.5.4.5 (2004/01/23) DBColumn 配列に値をセットします。 111 * @og.rev 5.2.1.0 (2010/10/01) useRenderer対応(コードリソース毎のラベル逆引き) 112 * @og.rev 5.9.0.0 (2015/09/04) XLSX対応でinitをここで行えるようにする。 113 * 114 * @param names カラム名配列 115 */ 116 protected void setTableDBColumn( final String[] names ) { 117 dbColumn = new DBColumn[names.length] ; // 3.5.4.5 追加 118 119 // 5.9.0.0 (2015/09/04) サイズ0の場合はinitする 120 if( table.getColumnCount() == 0){ 121 table.init( names.length ); 122 } 123 124 for( int i=0; i<names.length; i++ ) { 125 DBColumn clm = resource.makeDBColumn( names[i] ); 126 table.setDBColumn( i,clm ); 127 dbColumn[i] = clm; // 3.5.4.5 追加 128 } 129 130 if( useRenderer ) { 131 maps = new Map<?,?>[names.length]; // 5.5.1.7 (2012/04/16) ワイルドカードを指定 132 for( int i=0; i<names.length; i++ ) { 133 CodeData cd = dbColumn[i].getCodeData(); 134 if( cd != null ) { maps[i] = cd.makeLabelMap(); } 135 else { maps[i] = null; } 136 } 137 } 138 } 139 140 /** 141 * DBTableModelオブジェクトに、1行分のデータを追加します。 142 * これ自体は、メソッドの共通化による 拡張をしやすくするために用意しました。 143 * 144 * @og.rev 5.2.1.0 (2010/10/01) 新規作成 145 * 146 * @param values 1行分のデータ配列 147 */ 148 protected void setTableColumnValues( final String[] values ) { 149 if( useRenderer ) { 150 int clmSize = values.length; 151 for( int clmNo=0; clmNo<clmSize; clmNo++ ) { 152 if( maps[clmNo] != null ) { 153 String val = values[clmNo]; 154 if( val == null ) { val = ""; } 155 else { 156 String tmp = (String)maps[clmNo].get( val ); 157 if( tmp != null ) { values[clmNo] = tmp; } 158 else { 159 int sp = val.indexOf( ':' ); 160 if( sp >= 0 ) { 161 values[clmNo] = val.substring( 0,sp ); 162 } 163 } 164 } 165 } 166 } 167 } 168 169 table.addColumnValues( values ); 170 } 171 172 /** 173 * 1行のデータを テーブルモデルにセットするように分割します。 174 * 175 * なお、読込みは,NAME項目分を読み込みます。データ件数が少ない場合は、 176 * "" をセットしておきます。 177 * データの分割は、separator文字を使用します。 178 * 179 * @og.rev 3.3.3.1 (2003/07/18) ファイルリード/ライト時に後ろスペースの除去を行います。 180 * @og.rev 3.7.0.5 (2005/04/11) useNumber 属性を考慮します。 181 * 182 * @param data 1行のデータ 183 * @param clmSize カラム数 184 * 185 * @return 分割された文字列配列 186 */ 187 protected String[] readData( final String data,final int clmSize ) { 188 String[] rtnData = new String[ clmSize ]; 189 CSVTokenizer token = new CSVTokenizer( data,separator.charAt(0) ); 190 // 超イレギュラー処理 最初の separator 以前の文字は無視する。 191 // 3.7.0.5 (2005/04/11) 192 if( useNumber ) { token.nextToken(); } // 先頭は行番号のため無視する。 193 194 int clmNo = 0; 195 while( token.hasMoreTokens() ) { 196 String val = StringUtil.csvOutQuote( token.nextToken() ); 197 if( val != null && val.startsWith( "'0" ) ) { 198 rtnData[clmNo++] = StringUtil.rTrim( val.substring( 1 ) ); 199 } 200 else { 201 rtnData[clmNo++] = StringUtil.rTrim( val ); 202 } 203 if( clmNo >= clmSize ) { break; } // 3.7.0.5 (2005/04/11) 多い場合は、以降を無視する。 204 } 205 // EXCEL が、終端TABを削除してしまうため、少ない場合は埋める。 206 for( int i=clmNo; i<clmSize; i++ ) { 207 rtnData[i] = ""; 208 } 209 210 return rtnData; 211 } 212 213 /** 214 * 正規表現チェックでの処理対象行判断 215 * 216 * ファイルから特定の行のみ取り込みたい場合に利用します。 217 * matchKey(カラム名)とmatchVals(正規表現)を利用して処理判定を行います 218 * なお、EXCEL 入力には、この設定は適用されません。 219 * 何も設定しない場合は全行取込みとなります。 220 * 221 * @og.rev 5.9.8.1 (2016/05/13) 新規追加 222 * 223 * @return 処理対象行かどうか(true:処理対象) 224 */ 225 protected boolean matchCheck(final String[] data, final String[] names) { 226 boolean rtn = true; 227 228 if( matchKeys == null || matchKeys.length == 0 ) { return true; } 229 else if( matchKeysIndex == null || matchKeysIndex.length == 0 ){ 230 //matchKeyのindexを初回呼び出し時に保持しておく 231 matchKeysIndex = new int[matchKeys.length]; 232 for( int i=0; i<matchKeys.length; i++){ 233 matchKeysIndex[i] = -1; 234 for( int j=0; j<names.length; j++){ 235 if( matchKeys[i].equals( names[j] ) ){ 236 matchKeysIndex[i] = j; 237 } 238 } 239 } 240 } 241 242 // 全てマッチした場合のみtrue 243 if( matchKeysIndex != null && matchKeysIndex.length != 0 ) { 244 for( int i=0; i<matchKeysIndex.length; i++ ) { 245 if( matchKeysIndex[i] < 0 ){ continue; } 246 247 String val = data[ matchKeysIndex[i] ]; 248 if( val != null && val.matches( matchVals[i] ) ) { 249 rtn &= true; // 乗算 250 } 251 else if( val != null ){ 252 rtn = false; 253 } 254 } 255 } 256 return rtn; 257 } 258 259 /** 260 * 内部の DBTableModel を返します。 261 * 262 * @return テーブルモデル 263 */ 264 public DBTableModel getDBTableModel() { 265 return table; 266 } 267 268 /** 269 * データを読み込む場合の,区切り文字をセットします。 270 * 271 * なお,このメソッドは,サブクラスによっては,使用しない場合があります。 272 * もし,使用しないサブクラスを作成する場合は, UnsupportedOperationException 273 * を throw するように,サブクラスで実装して下さい。 274 * 275 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 276 * 277 * @param sep 区切り文字 278 */ 279 public void setSeparator( final String sep ) { 280 if( sep != null ) { this.separator = sep; } 281 } 282 283 /** 284 * データを書き込む場合の,区切り文字を返します。 285 * 286 * @return 区切り文字 287 */ 288 public String getSeparator() { 289 return separator; 290 } 291 292 /** 293 * DBTableModelのデータとして登録する最大件数をこの値に設定します 294 * (初期値:DB_MAX_ROW_COUNT[={@og.value org.opengion.hayabusa.common.SystemData#DB_MAX_ROW_COUNT}])。 295 * サーバーのメモリ資源と応答時間の確保の為です。 296 * 297 * @return 最大検索件数 298 */ 299 public int getMaxRowCount() { 300 return maxRowCount; 301 } 302 303 /** 304 * DBTableModelのデータとして登録する最大件数をこの値に設定します 305 * (初期値:DB_MAX_ROW_COUNT[={@og.value org.opengion.hayabusa.common.SystemData#DB_MAX_ROW_COUNT}])。 306 * サーバーのメモリ資源と応答時間の確保の為です。 307 * 308 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 309 * @og.rev 5.5.8.5 (2012/11/27) 0を無制限として処理します。 310 * 311 * @param maxRowCount 最大検索件数 312 */ 313 public void setMaxRowCount( final int maxRowCount ) { 314// this.maxRowCount = maxRowCount; 315 this.maxRowCount = ( maxRowCount > 0 ) ? maxRowCount : Integer.MAX_VALUE ; 316 } 317 318 /** 319 * DBTableModelのデータとしてEXCELファイルを読み込むときのシート名を設定します。 320 * これにより、複数の形式の異なるデータを順次読み込むことや、シートを指定して 321 * 読み取ることが可能になります。 322 * sheetNos と sheetName が同時に指定された場合は、sheetNos が優先されます。エラーにはならないのでご注意ください。 323 * のでご注意ください。 324 * このメソッドは、isExcel() == true の場合のみ利用されます。 325 * 326 * ※ このクラスでは実装されていません。 327 * 328 * @og.rev 3.5.4.2 (2003/12/15) 新規追加 329 * 330 * @param sheetName シート名 331 */ 332 public void setSheetName( final String sheetName ) { 333 String errMsg = "このメソッドは、EXCEL追加機能ですので、使用できません。"; 334 throw new UnsupportedOperationException( errMsg ); 335 } 336 337 /** 338 * EXCELファイルを読み込むときのシート番号を指定します(初期値:0)。 339 * 340 * EXCEL読み込み時に複数シートをマージして取り込みます。 341 * シート番号は、0 から始まる数字で表します。 342 * ヘッダーは、最初のシートのカラム位置に合わせます。(ヘッダータイトルの自動認識はありません。) 343 * よって、指定するシートは、すべて同一レイアウトでないと取り込み時にカラムのずれが発生します。 344 * 345 * シート番号の指定は、カンマ区切りで、複数指定できます。また、N-M の様にハイフンで繋げることで、 346 * N 番から、M 番のシート範囲を一括指定可能です。また、"*" による、全シート指定が可能です。 347 * これらの組み合わせも可能です。( 0,1,3,5-8,10-* ) 348 * ただし、"*" に関しては例外的に、一文字だけで、すべてのシートを表すか、N-* を最後に指定するかの 349 * どちらかです。途中には、"*" は、現れません。 350 * シート番号は、重複(1,1,2,2)、逆転(3,2,1) での指定が可能です。これは、その指定順で、読み込まれます。 351 * sheetNos と sheetName が同時に指定された場合は、sheetNos が優先されます。エラーにはならないのでご注意ください。 352 * このメソッドは、isExcel() == true の場合のみ利用されます。 353 * 354 * 初期値は、0(第一シート) です。 355 * 356 * ※ このクラスでは実装されていません。 357 * 358 * @og.rev 5.5.7.2 (2012/10/09) 新規追加 359 * 360 * @param sheetNos EXCELファイルのシート番号(0から始まる) 361 * @see #setSheetName( String ) 362 */ 363 public void setSheetNos( final String sheetNos ) { 364 String errMsg = "このメソッドは、EXCEL追加機能ですので、使用できません。"; 365 throw new UnsupportedOperationException( errMsg ); 366 } 367 368 /** 369 * EXCELファイルを読み込むときのシート単位の固定値を設定するためのカラム名とアドレスを指定します。 370 * カラム名は、カンマ区切りで指定します。 371 * 対応するアドレスを、EXCEL上の行-列を0から始まる整数でカンマ区切りで指定します。 372 * これにより、シートの一か所に書かれている情報を、DBTableModel のカラムに固定値として 373 * 設定することができます。 374 * 例として、DB定義書で、テーブル名をシートの全レコードに設定したい場合などに使います。 375 * このメソッドは、isExcel() == true の場合のみ利用されます。 376 * 377 * @og.rev 5.5.8.2 (2012/11/09) 新規追加 378 * 379 * @param constKeys 固定値となるカラム名(CSV形式) 380 * @param constAdrs 固定値となるアドレス(行-列,行-列,・・・) 381 */ 382 public void setSheetConstData( final String constKeys,final String constAdrs ) { 383 String errMsg = "このメソッドは、EXCEL追加機能ですので、使用できません。"; 384 throw new UnsupportedOperationException( errMsg ); 385 } 386 387 /** 388 * ここに指定されたカラム列に NULL が現れた時点で読み取りを中止します。 389 * 390 * これは、指定のカラムは必須という事を条件に、そのレコードだけを読み取る処理を行います。 391 * 複数Sheetの場合は、次のSheetを読みます。 392 * 現時点では、Excel の場合のみ有効です。 393 * 394 * @og.rev 5.5.8.2 (2012/11/09) 新規追加 395 * 396 * @param clm カラム列 397 */ 398 public void setNullBreakClm( final String clm ) { 399 String errMsg = "このメソッドは、EXCEL追加機能ですので、使用できません。"; 400 throw new UnsupportedOperationException( errMsg ); 401 } 402 403 /** 404 * このクラスが、EXCEL対応機能を持っているかどうかを返します。 405 * 406 * EXCEL対応機能とは、シート名のセット、読み込み元ファイルの 407 * Fileオブジェクト取得などの、特殊機能です。 408 * 本来は、インターフェースを分けるべきと考えますが、taglib クラス等の 409 * 関係があり、問い合わせによる条件分岐で対応します。 410 * 411 * @og.rev 3.5.4.3 (2004/01/05) 新規追加 412 * 413 * @return EXCEL対応機能を持っているかどうか 414 */ 415 public boolean isExcel() { 416 return false; 417 } 418 419 /** 420 * 読み取り元ファイル名をセットします。(DIR + Filename) 421 * これは、EXCEL追加機能として実装されています。 422 * ※ このクラスでは実装されていません。 423 * 424 * @og.rev 3.5.4.3 (2004/01/05) 新規作成 425 * 426 * @param filename 読み取り元ファイル名 427 */ 428 public void setFilename( final String filename ) { 429 String errMsg = "このメソッドは、EXCEL追加機能ですので、使用できません。"; 430 throw new UnsupportedOperationException( errMsg ); 431 } 432 433 /** 434 * 読み取り元ファイルのカラム列を、外部(タグ)より指定します。 435 * ファイルに記述された #NAME より優先して使用されます。 436 * 437 * @og.rev 3.5.4.5 (2004/01/23) 新規作成 438 * 439 * @param clms 読み取り元ファイルのカラム列(カンマ区切り文字) 440 */ 441 public void setColumns( final String clms ) { 442 columns = clms ; 443 } 444 445 /** 446 * 読み取り元ファイルのエンコード文字列を指定します。 447 * ファイルは、BufferedReader で受け取る為、本来は、エンコードは不要ですが、 448 * 固定長ファイルの読み取り時のバイトコード分割時に、指定のエンコードで 449 * 分割する必要があります。(例えば、半角文字は、Shift_JIS では、1バイト) 450 * 451 * @og.rev 3.5.4.5 (2004/01/23) 新規作成 452 * 453 * @param enc ファイルのエンコード文字列 454 */ 455 public void setEncode( final String enc ) { 456 encode = enc; 457 } 458 459 /** 460 * 読み取り元ファイルのエンコード文字列を取得します。 461 * ファイルは、BufferedReader で受け取る為、本来は、エンコードは不要ですが、 462 * 固定長ファイルの読み取り時のバイトコード分割時に、指定のエンコードで 463 * 分割する必要があります。(例えば、半角文字は、Shift_JIS では、1バイト) 464 * 465 * @og.rev 3.5.4.5 (2004/01/23) 新規作成 466 * 467 * @return ファイルのエンコード文字列 468 */ 469 protected String getEncode() { 470 return encode; 471 } 472 473 /** 474 * 行番号情報を指定[true:使用している/false:していない]します(初期値:true)。 475 * 476 * 通常のフォーマットでは、各行の先頭に行番号が出力されています。 477 * 読み取り時に、#NAME 属性を使用する場合は、この行番号を無視しています。 478 * #NAME 属性を使用せず、columns 属性でカラム名を指定する場合(他システムの 479 * 出力ファイルを読み取るケース等)では、行番号も存在しないケースがあり、 480 * その様な場合に、useNumber="false" を指定すれば、データの最初から読み取り始めます。 481 * この場合、出力データのカラムの並び順が変更された場合、columns 属性も 482 * 指定しなおす必要がありますので、できるだけ、#NAME 属性を使用するように 483 * してください。 484 * なお、EXCEL 入力には、この設定は適用されません。(暫定対応) 485 * 初期値は、true(使用する) です。 486 * 487 * @og.rev 3.7.0.5 (2005/04/11) 新規追加 488 * 489 * @param useNumber 行番号情報 [true:使用する/false:使用しない] 490 */ 491 public void setUseNumber( final boolean useNumber ) { 492 this.useNumber = useNumber ; 493 } 494 495 /** 496 * データの読み始めの初期値を取得します。 497 * 498 * TAB区切りテキストやEXCEL等のデータの読み始めの初期値を指定します。 499 * ファイルの先頭行が、0行としてカウントしますので、設定値は、読み飛ばす 500 * 件数になります。(1と指定すると、1件読み飛ばし、2行目から読み込みます。) 501 * 読み飛ばしは、コメント行などは、無視しますので、実際の行数分読み飛ばします。 502 * #NAME属性や、columns 属性は、有効です。 503 * 504 * @og.rev 5.1.6.0 (2010/05/01) 新規作成 505 * 506 * @return 読み始めの初期値 507 */ 508 public int getSkipRowCount() { 509 return skipRowCount ; 510 } 511 512 /** 513 * データの読み飛ばし件数を設定します。 514 * 515 * TAB区切りテキストやEXCEL等のデータの読み始めの初期値を指定します。 516 * ファイルの先頭行が、0行としてカウントしますので、設定値は、読み飛ばす 517 * 件数になります。(1と指定すると、1件読み飛ばし、2行目から読み込みます。) 518 * 読み飛ばしは、コメント行などは、無視しますので、実際の行数分読み飛ばします。 519 * #NAME属性や、columns 属性は、有効です。 520 * 521 * @og.rev 5.1.6.0 (2010/05/01) 新規作成 522 * 523 * @param count 読み始めの初期値 524 */ 525 public void setSkipRowCount( final int count ) { 526 skipRowCount = count; 527 } 528 529 /** 530 * 読取処理でラベルをコードリソースに逆変換を行うかどうかを指定します。 531 * 532 * TableWriter_Renderer 系のクラスで出力した場合は、コードリソースがラベルで出力されます。 533 * そのファイルを読み取ると、当然、エラーになります。 534 * ここでは、コードリソースのカラムに対して、ラベルからコードを求める逆変換を行うことで、 535 * Renderer 系で出力したファイルを取り込むことができるようにします。 536 * 537 * ここでは、TableWriter 系と同様に、TableReader_Renderer 系のクラスを作るのではなく、 538 * 属性値のフラグで、制御します。 539 * 将来的には、TableWriter 系も廃止して、同様のフラグで制御するように変更する予定です。 540 * 541 * @og.rev 5.2.1.0 (2010/10/01) 新規作成 542 * 543 * @param useRenderer コードリソースのラベル変換を行うかどうかを指定 544 */ 545 public void setUseRenderer( final boolean useRenderer ) { 546 this.useRenderer = useRenderer; 547 } 548 549 /** 550 * 行番号情報を、使用している(true)/していない(false)を返します。 551 * 552 * 通常のフォーマットでは、各行の先頭に行番号が出力されています。 553 * 読み取り時に、#NAME 属性を使用する場合は、この行番号を無視しています。 554 * #NAME 属性を使用せず、columns 属性でカラム名を指定する場合(他システムの 555 * 出力ファイルを読み取るケース等)では、行番号も存在しないケースがあり、 556 * その様な場合に、useNumber="false" を指定すれば、データの最初から読み取り始めます。 557 * この場合、出力データのカラムの並び順が変更された場合、columns 属性も 558 * 指定しなおす必要がありますので、できるだけ、#NAME 属性を使用するように 559 * してください。 560 * なお、EXCEL 入力には、この設定は適用されません。(暫定対応) 561 * 初期値は、true(使用する) です。 562 * 563 * @og.rev 3.7.0.5 (2005/04/11) 新規追加 564 * @og.rev 4.0.0.0 (2007/07/20) メソッド名変更(getUseNumber() ⇒ isUseNumber()) 565 * 566 * @return 行番号情報を、使用している(true)/していない(false)を指定 567 */ 568 protected boolean isUseNumber() { 569 return useNumber ; 570 } 571 572 /** 573 * 取込み対象判定を行うカラムを配列で指定します。 574 * 575 * @og.rev 5.9.8.1 (2016/05/13) 新規作成 576 * 577 * @param keys 判定対象カラム名配列 578 */ 579 public void setMatchKeys( final String[] keys ) { 580 matchKeys = keys; 581 } 582 583 /** 584 * 取込み対象判定の正規表現を配列で指定します。 585 * 586 * @og.rev 5.9.8.1 (2016/05/13) 新規作成 587 * 588 * @param vals 判定対象カラム名配列 589 */ 590 public void setMatchVals( final String[] vals ) { 591 matchVals = vals; 592 } 593 594 /** 595 * デバッグ情報を出力するかどうかを指定します。 596 * 597 * EXCELなどを読み取る場合、シートマージで読み取ると、エラー時の行番号が、連番になるため、 598 * どのシートなのか、判らなくなります。 599 * そこで、どうしてもわからなくなった場合に備えて、デバッグ情報を出力できるようにします。 600 * 通常は使用しませんので、設定を無視します。 601 * 初期値は、false:デバッグ情報を出力しない です。 602 * 603 * @og.rev 5.5.7.2 (2012/10/09) 新規作成 604 * 605 * @param useDebug デバッグ情報を出力するかどうかを指定 606 */ 607 public void setDebug( final boolean useDebug ) { 608 this.useDebug = useDebug; 609 } 610 611 /** 612 * デバッグ情報を出力するかどうかを取得します。 613 * 614 * EXCELなどを読み取る場合、シートマージで読み取ると、エラー時の行番号が、連番になるため、 615 * どのシートなのか、判らなくなります。 616 * そこで、どうしてもわからなくなった場合に備えて、デバッグ情報を出力できるようにします。 617 * 618 * @og.rev 5.5.7.2 (2012/10/09) 新規作成 619 * 620 * @return デバッグ情報を出力するかどうか(true:する/false:しない) 621 */ 622 protected boolean isDebug() { 623 return useDebug ; 624 } 625}