/**
* Process_Grep は、上流から受け取った FileLineModelから、文字列を見つけ出す
- * ChainProcess インターフェースの実装クラスです。
+ * ChainProcess インターフェースの実装クラスです。
*
- * 正規表現の keyword を上流から受け取った FileLineModel から検索します。
+ * 正規表現の keyword を上流から受け取った FileLineModel から検索します。
* 見つかった対象ファイルから、指定の文字列を置換する場合は、-change か
- * -changeFile で、keyword を置換する文字列を指定して下さい。
- * 置換する文字列には、\t と \n の特殊文字が使用できます。
+ * -changeFile で、keyword を置換する文字列を指定して下さい。
+ * 置換する文字列には、\t と \n の特殊文字が使用できます。
*
- * 処理対象は、通常は、1行づつ読み取りながら処理を行います。存在チェックの場合は、
- * 見つかった時点で処理を中止します。これは、該当箇所をピックアップするのではなく、
- * 存在しているかどうかを判断して、あれば、下流に流すというのが目的だからです。
- * keyword を、改行を含む正規表現で、検索・置換する場合は、-useBulkRead 属性を
- * true に設定してください。これは、入力ファイルを一括して読み込みます。
- * -ignoreCase は、検索時にキーの大文字小文字を無視するように指定します。
- * -notEquals は、結果(見つかればtrue)を反転(見つからなければtrue)します。
+ * 処理対象は、通常は、1行づつ読み取りながら処理を行います。存在チェックの場合は、
+ * 見つかった時点で処理を中止します。これは、該当箇所をピックアップするのではなく、
+ * 存在しているかどうかを判断して、あれば、下流に流すというのが目的だからです。
+ * keyword を、改行を含む正規表現で、検索・置換する場合は、-useBulkRead 属性を
+ * true に設定してください。これは、入力ファイルを一括して読み込みます。
+ * -ignoreCase は、検索時にキーの大文字小文字を無視するように指定します。
+ * -notEquals は、結果(見つかればtrue)を反転(見つからなければtrue)します。
* これは、行単位ではなく、ファイル単位に判定しますので、change 指定した場合
- * でも、対象行は、見つかった行です。ただし、下流に対して、見つからない
- * 場合だけ処理を継続させます。
- * -inEncode は、入力ファイルのエンコード指定になります。
+ * でも、対象行は、見つかった行です。ただし、下流に対して、見つからない
+ * 場合だけ処理を継続させます。
+ * -inEncode は、入力ファイルのエンコード指定になります。
* -outEncode は、出力ファイルのエンコードや、changeFileで指定の置換文字列ファイルの
- * エンコード指定になります。(changeFile は、必ず 出力ファイルと同じエンコードです。)
+ * エンコード指定になります。(changeFile は、必ず 出力ファイルと同じエンコードです。)
* これらのエンコードが無指定の場合は、System.getProperty("file.encoding") で
- * 求まる値を使用します。
- * -changeFile を使用することで、複数行の文字列に置換することが可能です。
- * -outfile では、処理を行ったファイル名一覧をセーブします。
+ * 求まる値を使用します。
+ * -changeFile を使用することで、複数行の文字列に置換することが可能です。
+ * -outfile では、処理を行ったファイル名一覧をセーブします。
*
- * 上流(プロセスチェインのデータは上流から渡されます。)からのLineModel の
- * ファイルオブジェクトより、指定の文字列が含まれているか検索します。
+ * 上流(プロセスチェインのデータは上流から渡されます。)からのLineModel の
+ * ファイルオブジェクトより、指定の文字列が含まれているか検索します。
* 上流プロセスでは、Name 属性として、『File』を持ち、値は、Fileオブジェクト
- * である、Process_FileSearch を使用するのが、便利です。それ以外のクラスを
+ * である、Process_FileSearch を使用するのが、便利です。それ以外のクラスを
* 使用する場合でも、Name属性と、File オブジェクトを持つ LineModel を受け渡し
- * できれば、使用可能です。
+ * できれば、使用可能です。
*
* ※ 6.3.1.1 (2015/07/10) useOmitCmnt、useAllFind 機能追加
*
- * 引数文字列中に空白を含む場合は、ダブルコーテーション("") で括って下さい。
- * 引数文字列の 『=』の前後には、空白は挟めません。必ず、-key=value の様に
- * 繋げてください。
+ * 引数文字列中に空白を含む場合は、ダブルコーテーション("") で括って下さい。
+ * 引数文字列の 『=』の前後には、空白は挟めません。必ず、-key=value の様に
+ * 繋げてください。
*
* ※ 8.1.3.0 (2022/06/03) jarPrefix、jarSuffix、jarInstr、useRegexp、saveFile 追加
- * jar ファイルの中身も検索します。その際、jarファイルに圧縮されているファイル名での
- * 絞り込みができるように、指定できる属性を追加します。
- * ただし、jarファイル内の検索は、useAllFind=true(置換ではなく検索だけ最後まで行う)のみです。
- * 上流から jar ファイルが指定された場合は、常に検索対象になります。
+ * jar ファイルの中身も検索します。その際、jarファイルに圧縮されているファイル名での
+ * 絞り込みができるように、指定できる属性を追加します。
+ * ただし、jarファイル内の検索は、useAllFind=true(置換ではなく検索だけ最後まで行う)のみです。
+ * 上流から jar ファイルが指定された場合は、常に検索対象になります。
*
* @og.formSample
* Process_Grep -keyword=検索文字列 -ignoreCase=true -outfile=OUTFILE -encode=UTF-8
* [-notEquals=判定結果の反転] :判定結果を反転させる(true)かどうか(初期値:反転させない[false])
* [-inEncode=入力エンコード ] :入力ファイルのエンコードタイプ
* [-outEncode=出力エンコード ] :出力ファイルや置換ファイルのエンコードタイプ
- * [-change=置換文字列 ] :-change="ABCD" \t や \n などの特殊文字が使用できます。
- * [-changeFile=置換ファイル ] :-changeFile=change.txt このファイルの記述すべてと置換します。
- * -change と、-changeFile は、同時に指定できません。
- * 置換機能使用時は、必ず、_backup というファイルが作成されます。
+ * [-change=置換文字列 ] :-change="ABCD" \t や \n などの特殊文字が使用できます。
+ * [-changeFile=置換ファイル ] :-changeFile=change.txt このファイルの記述すべてと置換します。
+ * -change と、-changeFile は、同時に指定できません。
+ * 置換機能使用時は、必ず、_backup というファイルが作成されます。
* [-insert=[HEAD/CHANGE/BEFORE/AFTER/TAIL] ]
* : 置換でなく挿入する場合の位置を指定します(初期値:CHANGE)
- * スペースで区切って数字を記述すると、挿入位置にオフセットできます。
+ * スペースで区切って数字を記述すると、挿入位置にオフセットできます。
* [-delete=[false/true] ] : 置換でなく削除します(初期値:false)
* [-skipRowCount=スキップ行数 ] : 先頭行から、スキップする行数を指定します(useBulkRead時には使用されません)
* [-useBackup=[false/true] ] :trueは、backupファイルを作成します(初期値:false)
private PrintWriter outWriter; // 8.1.3.0 (2022/06/03) PrintWriterオブジェクト
private final String fileURL = HybsSystem.sys( "FILE_URL" ); // 8.1.3.0 (2022/06/03) ファイルURL
- /** staticイニシャライザ後、読み取り専用にするので、ConcurrentHashMap を使用しません。 */
+ /** staticイニシャライザ後、読み取り専用にするので、ConcurrentHashMap を使用しません。 */
private static final Map<String,String> MUST_PROPARTY ; // [プロパティ]必須チェック用 Map
- /** staticイニシャライザ後、読み取り専用にするので、ConcurrentHashMap を使用しません。 */
+ /** staticイニシャライザ後、読み取り専用にするので、ConcurrentHashMap を使用しません。 */
private static final Map<String,String> USABLE_PROPARTY ; // [プロパティ]整合性チェック Map
static {
MUST_PROPARTY.put( "keyword", "検索する語句(必須)" );
USABLE_PROPARTY = new LinkedHashMap<>();
- USABLE_PROPARTY.put( "ignoreCase", "検索時に大文字小文字を区別しない(true)かどうか。" +
+ USABLE_PROPARTY.put( "ignoreCase", "検索時に大文字小文字を区別しない(true)かどうか。" +
CR + "(初期値:区別する[false])" );
- USABLE_PROPARTY.put( "notEquals", "検索時に判定結果を反転させる(true)かどうか。" +
+ USABLE_PROPARTY.put( "notEquals", "検索時に判定結果を反転させる(true)かどうか。" +
CR + "(初期値:反転させない[false])" );
USABLE_PROPARTY.put( "inEncode", "入力ファイルのエンコードタイプ" );
USABLE_PROPARTY.put( "outEncode", "出力ファイルや置換ファイルのエンコードタイプ" );
- USABLE_PROPARTY.put( "change", "置換文字列 例: -change=\"ABCD\" \\t や \\n などの特殊文字が使用できます。" );
+ USABLE_PROPARTY.put( "change", "置換文字列 例: -change=\"ABCD\" \\t や \\n などの特殊文字が使用できます。" );
USABLE_PROPARTY.put( "changeFile", "置換文字列ファイル 例: -changeFile=change.txt" +
- CR + "-change と、-changeFile は、同時に指定できません。" +
- CR + "置換機能使用時は、必ず、_backup というファイルが作成されます。" );
+ CR + "-change と、-changeFile は、同時に指定できません。" +
+ CR + "置換機能使用時は、必ず、_backup というファイルが作成されます。" );
USABLE_PROPARTY.put( "insert", "[HEAD/CHANGE/BEFORE/AFTER/TAIL]:置換でなく挿入する場合の位置を指定します(初期値:CHANGE)" +
- CR + "スペースで区切って数字を記述すると、挿入位置にオフセットできます。" );
+ CR + "スペースで区切って数字を記述すると、挿入位置にオフセットできます。" );
USABLE_PROPARTY.put( "delete", "[false/true]:trueは、置換でなく削除します(初期値:false)" );
- USABLE_PROPARTY.put( "skipRowCount","先頭行から、スキップする行数を指定します。" ); // 6.2.4.0 (2015/05/15)
+ USABLE_PROPARTY.put( "skipRowCount","先頭行から、スキップする行数を指定します。" ); // 6.2.4.0 (2015/05/15)
USABLE_PROPARTY.put( "useBackup", "[false/true]:trueは、backupファイルを作成します(初期値:false)" );
USABLE_PROPARTY.put( "useBulkRead", "[false/true]:trueは、入力ファイルを一括読込します(初期値:false)" );
USABLE_PROPARTY.put( "useAllFind", "置換ではなく検索だけ最後まで行う場合、trueを指定します(初期値:false)" ); // 6.3.1.1 (2015/07/10)
}
/**
- * デフォルトコンストラクター。
- * このクラスは、動的作成されます。デフォルトコンストラクターで、
- * super クラスに対して、必要な初期化を行っておきます。
+ * デフォルトコンストラクター。
+ * このクラスは、動的作成されます。デフォルトコンストラクターで、
+ * super クラスに対して、必要な初期化を行っておきます。
*
*/
public Process_Grep() {
}
/**
- * プロセスの初期化を行います。初めに一度だけ、呼び出されます。
- * 初期処理(ファイルオープン、DBオープン等)に使用します。
+ * プロセスの初期化を行います。初めに一度だけ、呼び出されます。
+ * 初期処理(ファイルオープン、DBオープン等)に使用します。
*
- * @og.rev 6.3.1.0 (2015/06/28) errAbend属性追加。
+ * @og.rev 6.3.1.0 (2015/06/28) errAbend属性追加。
* @og.rev 6.3.1.1 (2015/07/10) useOmitCmnt、useAllFind 機能追加
* @og.rev 8.1.3.0 (2022/06/03) jarファイル内の検索、オートエンコード対応
*
if( !isOK ) {
// 実行時エラーではないので、errAbend 対象外
final String errMsg = "insert は、" + Arrays.toString( INSERT_LIST )
- + " から指定してください。" + CR
+ + " から指定してください。" + CR
+ "-insert=[" + insert + "]" ;
throw new OgRuntimeException( errMsg );
}
change = StringUtil.replace( change,"\\t","\t" );
}
- if( delete ) { change = ""; } // 削除は、"" 文字列と置換します。
+ if( delete ) { change = ""; } // 削除は、"" 文字列と置換します。
// 8.1.3.0 (2022/06/03) Modify
// if( ignoreCase ) {
}
/**
- * プロセスの終了を行います。最後に一度だけ、呼び出されます。
- * 終了処理(ファイルクローズ、DBクローズ等)に使用します。
+ * プロセスの終了を行います。最後に一度だけ、呼び出されます。
+ * 終了処理(ファイルクローズ、DBクローズ等)に使用します。
*
* @og.rev 8.1.3.0 (2022/06/03) jarファイル内の検索、オートエンコード対応
*
}
/**
- * 引数の LineModel を処理するメソッドです。
- * 変換処理後の LineModel を返します。
+ * 引数の LineModel を処理するメソッドです。
+ * 変換処理後の LineModel を返します。
* 後続処理を行わない場合(データのフィルタリングを行う場合)は、
- * null データを返します。つまり、null データは、後続処理を行わない
- * フラグの代わりにも使用しています。
+ * null データを返します。つまり、null データは、後続処理を行わない
+ * フラグの代わりにも使用しています。
* なお、変換処理後の LineModel と、オリジナルの LineModel が、
- * 同一か、コピー(クローン)かは、各処理メソッド内で決めています。
+ * 同一か、コピー(クローン)かは、各処理メソッド内で決めています。
* ドキュメントに明記されていない場合は、副作用が問題になる場合は、
- * 各処理ごとに自分でコピー(クローン)して下さい。
+ * 各処理ごとに自分でコピー(クローン)して下さい。
*
- * @og.rev 4.0.1.0 (2007/12/14) ファイルの一括処理対応。
- * @og.rev 5.7.2.2 (2014/01/24) エラー時にデータも出力します。
- * @og.rev 6.3.1.0 (2015/06/28) errAbend属性追加。
+ * @og.rev 4.0.1.0 (2007/12/14) ファイルの一括処理対応。
+ * @og.rev 5.7.2.2 (2014/01/24) エラー時にデータも出力します。
+ * @og.rev 6.3.1.0 (2015/06/28) errAbend属性追加。
* @og.rev 8.1.3.0 (2022/06/03) jarファイル内の検索、オートエンコード対応
*
* @param data オリジナルのLineModel
}
else {
// これは、プログラマーの問題なので、errAbend 対象外
- final String errMsg = "データが FileLineModel オブジェクトではありません。" + CR ;
+ final String errMsg = "データが FileLineModel オブジェクトではありません。" + CR ;
throw new OgRuntimeException( errMsg );
}
// 置換処理 ただし、見つかったときのみ実行
if( change != null && isFind ) {
- // 入力ファイルは、オリジナル_backup ファイルとする。過去のファイルを削除
+ // 入力ファイルは、オリジナル_backup ファイルとする。過去のファイルを削除
final File inFile = new File( file.getPath() + "_backup" );
if( inFile.exists() && !inFile.delete() ) {
- final String errMsg = "過去のBKUPファイルを削除できませんでした。[" + inFile + "]" + CR
- + "data=[" + data.dataLine() + "]" + CR ; // 5.7.2.2 (2014/01/24) エラー時にデータも出力します。
- // try の中から throw するのは、行儀がよくないが、catch ブロックで errAbend処理する。
+ final String errMsg = "過去のBKUPファイルを削除できませんでした。[" + inFile + "]" + CR
+ + "data=[" + data.dataLine() + "]" + CR ; // 5.7.2.2 (2014/01/24) エラー時にデータも出力します。
+ // try の中から throw するのは、行儀がよくないが、catch ブロックで errAbend処理する。
throw new OgRuntimeException( errMsg );
}
- // オリジナルのファイルを、_backup ファイル名に先に変換する。
+ // オリジナルのファイルを、_backup ファイル名に先に変換する。
final File fromFile = new File( file.getPath() );
if( !fromFile.renameTo( inFile ) ) {
- final String errMsg = "所定のファイルをリネームできませんでした。[" + fromFile + "]" + CR
- + "data=[" + data.dataLine() + "]" + CR ; // 5.7.2.2 (2014/01/24) エラー時にデータも出力します。
- // try の中から throw するのは、行儀がよくないが、catch ブロックで errAbend処理する。
+ final String errMsg = "所定のファイルをリネームできませんでした。[" + fromFile + "]" + CR
+ + "data=[" + data.dataLine() + "]" + CR ; // 5.7.2.2 (2014/01/24) エラー時にデータも出力します。
+ // try の中から throw するのは、行儀がよくないが、catch ブロックで errAbend処理する。
throw new OgRuntimeException( errMsg );
}
// else { changeKeyword( inFile,file,firstLineNo ); }
else { changeKeyword( inFile,file,firstLineNo,mapEnc ); } // 8.1.3.0 (2022/06/03)
- // backup を使わない場合は、削除する。
+ // backup を使わない場合は、削除する。
// 4.0.0.0 (2007/11/29) 入れ子if の統合
if( !useBackup && !inFile.delete() ) {
- final String errMsg = "所定のファイルを削除できませんでした。[" + inFile + "]" + CR
- + "data=[" + data.dataLine() + "]" + CR ; // 5.7.2.2 (2014/01/24) エラー時にデータも出力します。
- // try の中から throw するのは、行儀がよくないが、catch ブロックで errAbend処理する。
+ final String errMsg = "所定のファイルを削除できませんでした。[" + inFile + "]" + CR
+ + "data=[" + data.dataLine() + "]" + CR ; // 5.7.2.2 (2014/01/24) エラー時にデータも出力します。
+ // try の中から throw するのは、行儀がよくないが、catch ブロックで errAbend処理する。
throw new OgRuntimeException( errMsg );
}
}
}
catch( final RuntimeException ex ) {
- final String errMsg = "処理中にエラーが発生しました。[" + data.getRowNo() + "]件目" + CR
- + "data=[" + data.dataLine() + "]" + CR ; // 5.7.2.2 (2014/01/24) エラー時にデータも出力します。
- // 6.3.1.0 (2015/06/28) errAbend属性追加。
+ final String errMsg = "処理中にエラーが発生しました。[" + data.getRowNo() + "]件目" + CR
+ + "data=[" + data.dataLine() + "]" + CR ; // 5.7.2.2 (2014/01/24) エラー時にデータも出力します。
+ // 6.3.1.0 (2015/06/28) errAbend属性追加。
throwException( errMsg,ex,errAbend );
}
}
/**
- * キーワードが存在しているかどうかをチェックします。
+ * キーワードが存在しているかどうかをチェックします。
* ここでは、1行づつ読み取りながら、すべてのキーワードをピックアップします。
*
* @og.rev 8.1.3.0 (2022/06/03) jarファイル内の検索、オートエンコード対応
+ * @og.rev 8.5.2.0 (2023/07/14) -change=置換文字列 の指定がなくても findCount がセットされるように対応
*
* @param file 検索元のファイルオブジェクト
*/
}
// useAllFind=true 相当の処理のみ行う
println( msg );
+ findCount++ ; // 8.5.2.0 (2023/07/14) Add
// 保存ファイル指定有り
if( StringUtil.isNotNull(saveFile) ){ outWriter.println( msg ); }
}
// nioを使用すると UTF-8とShuft-JISで、エラーになる
catch( final CharacterCodingException ex ) {
- final String errMsg = "文字のエンコード・エラーが発生しました。" + CR
- + " ファイルのエンコードが指定のエンコードと異なります。" + CR
+ final String errMsg = "文字のエンコード・エラーが発生しました。" + CR
+ + " ファイルのエンコードが指定のエンコードと異なります。" + CR
+ " [" + file.getPath() + "] , Encode=[" + mapEnc + "]" ;
// 呼出元で errAbend 処理するので、そのまま throw しておく
throw new OgCharacterException( errMsg,ex );
}
catch( final IOException ex ) {
- final String errMsg = "キーワードファイル読取エラーが発生しました。" + CR
+ final String errMsg = "キーワードファイル読取エラーが発生しました。" + CR
+ " [" + file.getPath() + "] , Encode=[" + mapEnc + "]" ;
// 呼出元で errAbend 処理するので、そのまま throw しておく
throw new OgRuntimeException( errMsg,ex );
}
}
catch( final IOException ex ) {
- final String errMsg = "キーワードファイル読取エラーが発生しました。" + CR
+ final String errMsg = "キーワードファイル読取エラーが発生しました。" + CR
+ " [" + file.getPath() + "] , Encode=[" + inEncode + "]" ;
// 呼出元で errAbend 処理するので、そのまま throw しておく
throw new OgRuntimeException( errMsg,ex );
}
/**
- * キーワードが存在しているかどうかをチェックします。
- * ここでは、1行づつ読み取りながら、最初に見つかった時点で制御を返します。
+ * キーワードが存在しているかどうかをチェックします。
+ * ここでは、1行づつ読み取りながら、最初に見つかった時点で制御を返します。
* よって、複数行にまたがる keyword でのマッチングは出来ませんが、大きな
- * ファイル等での検索には、効率的です。
+ * ファイル等での検索には、効率的です。
*
* @og.rev 4.0.1.0 (2007/12/14) 新規追加
- * @og.rev 6.3.1.0 (2015/06/28) nioを使用すると UTF-8とShuft-JISで、エラーになる。
- * @og.rev 6.3.1.0 (2015/06/28) errAbend属性追加。
+ * @og.rev 6.3.1.0 (2015/06/28) nioを使用すると UTF-8とShuft-JISで、エラーになる。
+ * @og.rev 6.3.1.0 (2015/06/28) errAbend属性追加。
* @og.rev 6.3.1.1 (2015/07/10) useOmitCmnt、useAllFind 機能追加
- * @og.rev 6.4.0.2 (2015/12/11) CommentLineParser 改造。
- * @og.rev 6.5.0.1 (2016/10/21) CharacterCodingException は、OgCharacterException に変換する。
+ * @og.rev 6.4.0.2 (2015/12/11) CommentLineParser 改造。
+ * @og.rev 6.5.0.1 (2016/10/21) CharacterCodingException は、OgCharacterException に変換する。
* @og.rev 8.1.3.0 (2022/06/03) jarファイル内の検索、オートエンコード対応
+ * @og.rev 8.5.2.0 (2023/07/14) -change=置換文字列 の指定がなくても findCount がセットされるように対応
*
* @param file 検索元のファイルオブジェクト
* @param mapEnc 検索元のファイルエンコード
String line ;
int lineNo = 0;
while((line = reader.readLine()) != null) {
- lineNo++ ; // 注意:ここで返す行数は、コメント行を含む行数とする。
+ lineNo++ ; // 注意:ここで返す行数は、コメント行を含む行数とする。
- // 6.3.1.1 (2015/07/10) useOmitCmnt 機能。コメント行を削除する処理を入れる。
+ // 6.3.1.1 (2015/07/10) useOmitCmnt 機能。コメント行を削除する処理を入れる。
if( useOmitCmnt ) {
line = clp.line( line );
if( line == null ) { continue; } // 戻り値が null の場合は、行として不成立
println( buf );
}
- // 6.3.1.1 (2015/07/10) useAllFind 機能。最後まで検索を続けます。
+ // 6.3.1.1 (2015/07/10) useAllFind 機能。最後まで検索を続けます。
if( useAllFind ) {
final String msg = file.getAbsolutePath() + '(' + lineNo + "):" + line ;
println( msg );
+ findCount++ ; // 8.5.2.0 (2023/07/14) Add
// 8.1.3.0 (2022/06/03) 保存ファイル指定有り
if( StringUtil.isNotNull(saveFile) ){ outWriter.println( msg ); }
}
}
}
}
- // 6.3.1.0 (2015/06/28) nioを使用すると UTF-8とShuft-JISで、エラーになる。
+ // 6.3.1.0 (2015/06/28) nioを使用すると UTF-8とShuft-JISで、エラーになる。
catch( final CharacterCodingException ex ) {
- final String errMsg = "文字のエンコード・エラーが発生しました。" + CR
- + " ファイルのエンコードが指定のエンコードと異なります。" + CR
+ final String errMsg = "文字のエンコード・エラーが発生しました。" + CR
+ + " ファイルのエンコードが指定のエンコードと異なります。" + CR
// + " [" + file.getPath() + "] , Encode=[" + inEncode + "]" ;
+ " [" + file.getPath() + "] , Encode=[" + mapEnc + "]" ; // 8.1.3.0 (2022/06/03)
- // 呼出元で、errAbend処理するので、そのまま、throw しておく。
+ // 呼出元で、errAbend処理するので、そのまま、throw しておく。
throw new OgCharacterException( errMsg,ex ); // 6.5.0.1 (2016/10/21)
}
catch( final IOException ex ) {
- final String errMsg = "キーワードファイル読取エラーが発生しました。" + CR
+ final String errMsg = "キーワードファイル読取エラーが発生しました。" + CR
// + " [" + file.getPath() + "] , Encode=[" + inEncode + "]" ;
+ " [" + file.getPath() + "] , Encode=[" + mapEnc + "]" ; // 8.1.3.0 (2022/06/03)
- // 呼出元で、errAbend処理するので、そのまま、throw しておく。
+ // 呼出元で、errAbend処理するので、そのまま、throw しておく。
throw new OgRuntimeException( errMsg,ex );
}
finally {
}
/**
- * キーワードが存在しているかどうかをチェックします。
- * ここでは、ファイルをすべて読み取ってから、チェックします。
- * よって、複数行にまたがる keyword でのマッチングが可能です。
+ * キーワードが存在しているかどうかをチェックします。
+ * ここでは、ファイルをすべて読み取ってから、チェックします。
+ * よって、複数行にまたがる keyword でのマッチングが可能です。
*
* @og.rev 4.0.1.0 (2007/12/14) 新規追加
* @og.rev 6.4.5.1 (2016/04/28) FileStringのコンストラクター変更
- * @og.rev 6.4.5.2 (2016/05/06) fukurou.util.FileString から、fukurou.util.FileUtil に移動。
+ * @og.rev 6.4.5.2 (2016/05/06) fukurou.util.FileString から、fukurou.util.FileUtil に移動。
* @og.rev 8.1.3.0 (2022/06/03) jarファイル内の検索、オートエンコード対応
+ * @og.rev 8.5.2.0 (2023/07/14) -change=置換文字列 の指定がなくても findCount がセットされるように対応
*
* @param file 検索元のファイルオブジェクト
* @param mapEnc 検索元のファイルエンコード
final Matcher mach = pattern.matcher( line );
if( mach.find() ) {
if( debug ) { println( "DEBUG:\t" + file.getPath() ); }
+ findCount++ ; // 8.5.2.0 (2023/07/14) Add
isFind = true;
}
}
/**
- * キーワードを指定の文字列に置き換えます。
+ * キーワードを指定の文字列に置き換えます。
* useBackup 属性に true を指定した場合、置き換え後の、backup ファイルは、
- * オリジナル_backup という名称に変わります。
- * ここでは、1行づつ読み取りながら、変換処理を行います。
+ * オリジナル_backup という名称に変わります。
+ * ここでは、1行づつ読み取りながら、変換処理を行います。
* よって、複数行にまたがる keyword でのマッチングは出来ませんが、大きな
- * ファイル等での置換でも、メモリの使用量は抑えられます。
+ * ファイル等での置換でも、メモリの使用量は抑えられます。
*
- * @og.rev 4.0.1.0 (2007/12/14) 置換処理を独立させます。
+ * @og.rev 4.0.1.0 (2007/12/14) 置換処理を独立させます。
* @og.rev 6.2.4.0 (2015/05/15) HEAD,TAIL 追加
- * @og.rev 6.3.1.0 (2015/06/28) nioを使用すると UTF-8とShuft-JISで、エラーになる。
- * @og.rev 6.5.0.1 (2016/10/21) CharacterCodingException は、OgCharacterException に変換する。
+ * @og.rev 6.3.1.0 (2015/06/28) nioを使用すると UTF-8とShuft-JISで、エラーになる。
+ * @og.rev 6.5.0.1 (2016/10/21) CharacterCodingException は、OgCharacterException に変換する。
* @og.rev 8.1.3.0 (2022/06/03) jarファイル内の検索、オートエンコード対応
*
* @param inFile 検索元の入力ファイルオブジェクト
cngCount++ ; // 変換されれば カウント
}
}
- writer.println( line ); // readLine() してるので、最後に改行が必要。
+ writer.println( line ); // readLine() してるので、最後に改行が必要。
}
// 6.2.4.0 (2015/05/15) HEAD,TAIL 追加
writer.println( change );
}
}
- // 6.3.1.0 (2015/06/28) nioを使用すると UTF-8とShuft-JISで、エラーになる。
+ // 6.3.1.0 (2015/06/28) nioを使用すると UTF-8とShuft-JISで、エラーになる。
catch( final CharacterCodingException ex ) {
- final String errMsg = "文字のエンコード・エラーが発生しました。" + CR
- + " ファイルのエンコードが指定のエンコードと異なります。" + CR
+ final String errMsg = "文字のエンコード・エラーが発生しました。" + CR
+ + " ファイルのエンコードが指定のエンコードと異なります。" + CR
// + " [" + inFile + "] , Encode=[" + inEncode + "]" ;
+ " [" + inFile + "] , Encode=[" + mapEnc + "]" ; // 8.1.3.0 (2022/06/03)
- // 呼出元で、errAbend処理するので、そのまま、throw しておく。
+ // 呼出元で、errAbend処理するので、そのまま、throw しておく。
throw new OgCharacterException( errMsg,ex ); // 6.5.0.1 (2016/10/21)
}
catch( final IOException ex ) {
- final String errMsg = "処理中にエラーが発生しました。[" + line + "]" + CR
+ final String errMsg = "処理中にエラーが発生しました。[" + line + "]" + CR
// + " [" + inFile + "] , Encode=[" + inEncode + "]" ;
+ " [" + inFile + "] , Encode=[" + mapEnc + "]" ; // 8.1.3.0 (2022/06/03)
- // 呼出元で、errAbend処理するので、そのまま、throw しておく。
+ // 呼出元で、errAbend処理するので、そのまま、throw しておく。
throw new OgRuntimeException( errMsg,ex );
}
finally {
}
}
/**
- * キーワードを指定の文字列に置き換えます。
+ * キーワードを指定の文字列に置き換えます。
* useBackup 属性に true を指定した場合、置き換え後の、backup ファイルは、
- * オリジナル_backup という名称に変わります。
- * ここでは、ファイルをすべて読み取ってから、チェックします。
- * よって、複数行にまたがる keyword でのマッチングが可能です。
+ * オリジナル_backup という名称に変わります。
+ * ここでは、ファイルをすべて読み取ってから、チェックします。
+ * よって、複数行にまたがる keyword でのマッチングが可能です。
*
- * @og.rev 4.0.1.0 (2007/12/14) 置換処理を独立させます。
+ * @og.rev 4.0.1.0 (2007/12/14) 置換処理を独立させます。
* @og.rev 6.2.4.0 (2015/05/15) HEAD,TAIL 追加
*
* @param fileLine 検索元の行文字列
}
}
catch( final RuntimeException ex ) {
- final String errMsg = "処理中にエラーが発生しました。[" + outFile.getPath() + "]" ;
- // 呼出元で、errAbend処理するので、そのまま、throw しておく。
+ final String errMsg = "処理中にエラーが発生しました。[" + outFile.getPath() + "]" ;
+ // 呼出元で、errAbend処理するので、そのまま、throw しておく。
throw new OgRuntimeException( errMsg,ex );
}
finally {
}
/**
- * insert が、"CHANGE" の場合の処理結果を求めます。
- * 変換しなかった場合は、null を返します。
- * これは、変換カウントを算出する為のフラグ代わりに使用しています。
+ * insert が、"CHANGE" の場合の処理結果を求めます。
+ * 変換しなかった場合は、null を返します。
+ * これは、変換カウントを算出する為のフラグ代わりに使用しています。
*
* @param mach キーワードの正規表現
*
}
/**
- * insert が、"BEFORE" の場合の処理結果を求めます。
- * 変換しなかった場合は、null を返します。
- * これは、変換カウントを算出する為のフラグ代わりに使用しています。
+ * insert が、"BEFORE" の場合の処理結果を求めます。
+ * 変換しなかった場合は、null を返します。
+ * これは、変換カウントを算出する為のフラグ代わりに使用しています。
*
* @param line 検索行
* @param mach キーワードの正規表現
}
/**
- * insert が、"AFTER" の場合の処理結果を求めます。
- * 変換しなかった場合は、null を返します。
- * これは、変換カウントを算出する為のフラグ代わりに使用しています。
+ * insert が、"AFTER" の場合の処理結果を求めます。
+ * 変換しなかった場合は、null を返します。
+ * これは、変換カウントを算出する為のフラグ代わりに使用しています。
*
* @param line 検索行
* @param mach キーワードの正規表現
}
/**
- * プロセスの処理結果のレポート表現を返します。
- * 処理プログラム名、入力件数、出力件数などの情報です。
+ * プロセスの処理結果のレポート表現を返します。
+ * 処理プログラム名、入力件数、出力件数などの情報です。
* この文字列をそのまま、標準出力に出すことで、結果レポートと出来るような
- * 形式で出してください。
+ * 形式で出してください。
*
* @return 処理結果のレポート
*/
}
/**
- * このクラスの使用方法を返します。
+ * このクラスの使用方法を返します。
*
* @return このクラスの使用方法
* @og.rtnNotNull
public String usage() {
final StringBuilder buf = new StringBuilder( 1400 )
.append( "Process_Grep は、上流から受け取った FileLineModelから、文字列を見つけ出す" ).append( CR )
- .append( "ChainProcess インターフェースの実装クラスです。" ).append( CR )
+ .append( "ChainProcess インターフェースの実装クラスです。" ).append( CR )
.append( CR )
- .append( "正規表現の keyword を上流から受け取った FileLineModel から検索します。" ).append( CR )
+ .append( "正規表現の keyword を上流から受け取った FileLineModel から検索します。" ).append( CR )
.append( "見つかった対象ファイルから、指定の文字列を置換する場合は、-change か" ).append( CR )
- .append( "-changeFile で、keyword を置換する文字列を指定して下さい。" ).append( CR )
- .append( "置換する文字列には、\t と \n の特殊文字が使用できます。" ).append( CR )
+ .append( "-changeFile で、keyword を置換する文字列を指定して下さい。" ).append( CR )
+ .append( "置換する文字列には、\t と \n の特殊文字が使用できます。" ).append( CR )
.append( CR )
- .append( "処理対象は、通常は、1行づつ読み取りながら処理を行います。存在チェックの場合は、" ).append( CR )
- .append( "見つかった時点で処理を中止します。これは、該当箇所をピックアップするのではなく、" ).append( CR )
- .append( "存在しているかどうかを判断して、あれば、下流に流すというのが目的だからです。" ).append( CR )
- .append( "keyword を、改行を含む正規表現で、検索・置換する場合は、-useBulkRead 属性を" ).append( CR )
- .append( "true に設定してください。これは、入力ファイルを一括して読み込みます。" ).append( CR )
- .append( "-ignoreCase は、検索時にキーの大文字小文字を無視するように指定します。" ).append( CR )
- .append( "-notEquals は、結果(見つかればtrue)を反転(見つからなければtrue)します。" ).append( CR )
+ .append( "処理対象は、通常は、1行づつ読み取りながら処理を行います。存在チェックの場合は、" ).append( CR )
+ .append( "見つかった時点で処理を中止します。これは、該当箇所をピックアップするのではなく、" ).append( CR )
+ .append( "存在しているかどうかを判断して、あれば、下流に流すというのが目的だからです。" ).append( CR )
+ .append( "keyword を、改行を含む正規表現で、検索・置換する場合は、-useBulkRead 属性を" ).append( CR )
+ .append( "true に設定してください。これは、入力ファイルを一括して読み込みます。" ).append( CR )
+ .append( "-ignoreCase は、検索時にキーの大文字小文字を無視するように指定します。" ).append( CR )
+ .append( "-notEquals は、結果(見つかればtrue)を反転(見つからなければtrue)します。" ).append( CR )
.append( "これは、行単位ではなく、ファイル単位に判定しますので、change 指定した場合" ).append( CR )
- .append( "でも、対象行は、見つかった行です。ただし、下流に対して、見つからない" ).append( CR )
- .append( "場合だけ処理を継続させます。" ).append( CR )
- .append( "-inEncode は、入力ファイルのエンコード指定になります。" ).append( CR )
+ .append( "でも、対象行は、見つかった行です。ただし、下流に対して、見つからない" ).append( CR )
+ .append( "場合だけ処理を継続させます。" ).append( CR )
+ .append( "-inEncode は、入力ファイルのエンコード指定になります。" ).append( CR )
.append( "-outEncode は、出力ファイルのエンコードや、changeFileで指定の置換文字列" ).append( CR )
- .append( "ファイルのエンコード指定になります。(changeFile は、必ず 出力ファイルと)" ).append( CR )
- .append( "同じエンコードです。" ).append( CR )
+ .append( "ファイルのエンコード指定になります。(changeFile は、必ず 出力ファイルと)" ).append( CR )
+ .append( "同じエンコードです。" ).append( CR )
.append( "これらのエンコードが無指定の場合は、System.getProperty(\"file.encoding\") " ).append( CR )
- .append( "で求まる値を使用します。" ).append( CR )
- .append( "-changeFile を使用することで、複数行の文字列に置換することが可能です。" ).append( CR )
+ .append( "で求まる値を使用します。" ).append( CR )
+ .append( "-changeFile を使用することで、複数行の文字列に置換することが可能です。" ).append( CR )
.append( CR )
- .append( "上流(プロセスチェインのデータは上流から渡されます。)からのLineModel の" ).append( CR )
- .append( "ファイルオブジェクトより、指定の文字列が含まれているか検索します。" ).append( CR )
+ .append( "上流(プロセスチェインのデータは上流から渡されます。)からのLineModel の" ).append( CR )
+ .append( "ファイルオブジェクトより、指定の文字列が含まれているか検索します。" ).append( CR )
.append( "上流プロセスでは、Name 属性として、『File』を持ち、値は、Fileオブジェクト" ).append( CR )
- .append( "である、Process_FileSearch を使用するのが、便利です。それ以外のクラスを" ).append( CR )
+ .append( "である、Process_FileSearch を使用するのが、便利です。それ以外のクラスを" ).append( CR )
.append( "使用する場合でも、Name属性と、File オブジェクトを持つ LineModel を受け渡し" ).append( CR )
- .append( "できれば、使用可能です。" ).append( CR )
+ .append( "できれば、使用可能です。" ).append( CR )
.append( CR )
- .append( "引数文字列中に空白を含む場合は、ダブルコーテーション(\"\") で括って下さい。" ).append( CR )
- .append( "引数文字列の 『=』の前後には、空白は挟めません。必ず、-key=value の様に" ).append( CR )
- .append( "繋げてください。" ).append( CR )
+ .append( "引数文字列中に空白を含む場合は、ダブルコーテーション(\"\") で括って下さい。" ).append( CR )
+ .append( "引数文字列の 『=』の前後には、空白は挟めません。必ず、-key=value の様に" ).append( CR )
+ .append( "繋げてください。" ).append( CR )
.append( CR ).append( CR )
.append( getArgument().usage() ).append( CR );
}
/**
- * このクラスは、main メソッドから実行できません。
+ * このクラスは、main メソッドから実行できません。
*
* @param args コマンド引数配列
*/