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.plugin.io; 017 018// import java.io.PrintWriter; 019 020// import org.opengion.fukurou.util.StringUtil; // 8.5.2.0 (2023/07/14) Delete 021// import org.opengion.hayabusa.db.DBTableModel; 022 023/** 024 * CSV形式ダブルクォートファイル(CSV)形式書き込みクラスです。 025 * 標準と異なるのは、文字列のみ、ダブルクオート処理を行い、数字型は、ダブルクオートも 026 * ゼロカンマも付けません。 027 * 028 * DefaultTableWriter を継承していますので、ラベル、名前、データの出力部のみ 029 * オーバーライドして、可変長CSV形式ファイルの出力機能を実現しています。 030 * 031 * [writeData] 032 * 区切り : CSV_SEPARATOR 固定 033 * 行番号 : ( 行番号 + 1 ) 034 * カラムデータ: 数字型 val 035 * : それ以外 quotation( val ) 036 * 037 * @og.rev 5.6.9.4 (2013/10/31) 新規作成 038 * @og.rev 8.5.6.1 (2024/03/29) TableWriter_CSV を継承します。 039 * @og.group ファイル出力 040 * 041 * @version 8.5 042 * @author Kazuhiko Hasegawa 043 * @since JDK21.0, 044 */ 045// public class TableWriter_CSV3 extends TableWriter_Default { 046public class TableWriter_CSV3 extends TableWriter_CSV { 047 /** このプログラムのVERSION文字列を設定します。 {@value} */ 048 private static final String VERSION = "8.5.6.1 (2024/03/29)" ; 049 050 /** 051 * デフォルトコンストラクター 052 * 053 * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor. 054 */ 055 public TableWriter_CSV3() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。 056 057// /** 058// * DBTableModel から データを作成して、PrintWriter に書き出します。 059// * 060// * @og.rev 8.5.6.1 (2024/03/29) TableWriter_CSV を継承します。 061// * 062// * @param writer PrintWriterオブジェクト 063// */ 064// @Override 065// public void writeDBTable( final PrintWriter writer ) { 066// super.setSeparator( CSV_SEPARATOR ); // 3.5.6.0 (2004/06/18) 067// super.writeDBTable( writer ); 068// } 069 070// /** 071// * PrintWriter に DBTableModelのテーブル情報を書き込みます。 072// * このクラスでは、データを ダブルコーテーション(")で囲みます。 073// * PrintWriter に DBTableModelのテーブル情報を書き込みます。 074// * 075// * @og.rev 6.0.1.2 (2014/08/08) カラム飛ばしできる機能を追加 076// * @og.rev 6.0.4.0 (2014/11/28) データ出力用のレンデラー 077// * @og.rev 7.2.6.1 (2020/07/17) 行番号にダブルクオートは付けません。 078// * @og.rev 8.5.2.0 (2023/07/14) 一部の機能廃止による修正(問合・トラブル 0200010980) 079// * @og.rev 8.5.6.1 (2024/03/29) TableWriter_CSV を継承します。 080// * 081// * @param table DBTableModelオブジェクト 082// * @param writer PrintWriterオブジェクト 083// */ 084// @Override 085// protected void writeData( final DBTableModel table,final PrintWriter writer ) { 086// final int numberOfRows = table.getRowCount(); 087// final boolean useNumber = isUseNumber(); 088// final boolean useRenderer = isUseRenderer(); // 5.2.1.0 (2010/10/01) 089// 090// for( int row=0; row<numberOfRows; row++ ) { 091// if( useNumber ) { 092//// writer.print( quotation( String.valueOf( row+1 ) ) ); 093// writer.print( String.valueOf( row+1 ) ); // 7.2.6.1 (2020/07/17) 行番号にダブルクオートは付けません。 094// writer.print( CSV_SEPARATOR ); 095// } 096// 097// for( int i=0; i<numberOfColumns; i++ ) { 098// if( i != 0 ) { writer.print( CSV_SEPARATOR ); } 099// final int clm = clmNo[i]; 100// if( clm < 0 ) { continue; } // 6.0.1.2 (2014/08/08) カラム飛ばし 101// 102// String val = table.getValue(row,clm); 103//// if( dbType[i] == NVAR ) { // 8.5.2.0 (2023/07/14) Delete 104//// val = StringUtil.getReplaceEscape( val ); // 8.5.2.0 (2023/07/14) Delete 105//// } // 8.5.2.0 (2023/07/14) Delete 106// // 5.2.1.0 (2010/10/01) useRenderer 対応 107//// else if( useRenderer ) { // 8.5.2.0 (2023/07/14) Modify 108// if( useRenderer ) { 109// // 6.0.4.0 (2014/11/28) データ出力用のレンデラー 110// val = dbColumn[clm].getWriteValue( val ); 111// } 112// 113// // 数字型には、ダブルクオートは付けません。 114// if( dbType[i] == NUMBER ) { 115// writer.print( val ); 116// } 117// else { 118// writer.print( quotation( val ) ); 119// } 120// } 121// writer.println(); 122// } 123// } 124 125 /** 126 * 先頭の行番号に対してのクオーテーション処理を行います。 127 * 128 * サブクラスによって処理方法が異なります。 129 * 130 * @og.rev 8.5.6.1 (2024/03/29) 継承で使えるように、一部修正します。 131 * 132 * @param row 行番号 133 * 134 * @return 変換後の文字列 135 */ 136 protected String numberQuotation( final int row ) { 137 return String.valueOf( row+1 ); // 7.2.6.1 (2020/07/17) 行番号にダブルクオートは付けません。 138 } 139 140 /** 141 * データを書き込む場合の区切り文字をセットします。 142 * このクラスでは、CSV 固定の為、区切り文字のセットは無効になります。 143 * 144 * @og.rev 8.5.6.1 (2024/03/29) 継承で使えるように、一部修正します。 145 * 146 * @param val 入力文字列 147 * @param dtype DBタイプ(STRING/NUMBER) 148 * 149 * @return 変換後の文字列 150 */ 151 protected String dataQuotation( final String val, final int dtype ) { 152 // 数字型には、ダブルクオートは付けません。 153 return dtype == NUMBER ? val : quotation( val ); 154 } 155 156// /** 157// * データを書き込む場合の区切り文字をセットします。 158// * このクラスでは、CSV 固定の為、区切り文字のセットは無効になります。 159// * 160// * @og.rev 8.5.6.1 (2024/03/29) setSeparator をcsvInit()で行います。 161// * 162// * @param sprt 区切り文字 163// */ 164// @Override 165// public void setSeparator( final String sprt ) { 166// super.setSeparator( CSV_SEPARATOR ) ; // 3.5.6.0 (2004/06/18) 167// } 168}