【コマンドプロンプト】FCコマンド
フリーソフトのWINMERGEというソフトでよくテキストの比較を行うことがよくあるけど、
コマンドプロンプトでも比較するコマンドがある。
それがFCというコマンド
C:\Users\owner>fc /? 2 つのファイルまたはファイル セットを比較し、相違点を表示します。 FC [/A] [/C] [/L] [/LBn] [/N] [/OFF[LINE]] [/T] [/U] [/W] [/nnnn] [ドライブ1:][パス1]ファイル名1 [ドライブ2:][パス2]ファイル名2 FC /B [ドライブ1:][パス1]ファイル名1 [ドライブ2:][パス2]ファイル名2 /A 相違する各部分の 1 行目と最後の行だけを表示します。 /B バイナリの比較を実行します。 /C 英字の大文字と小文字を区別しません。 /L ファイルを ASCII テキストとして比較します。 /LBn 連続する最大不一致行を指定行数に設定します。 /N ASCII の比較で行番号を表示します。 /OFF[LINE] オフライン属性が設定されたファイルをスキップしません。 /T タブをスペースに変換しません。 /U Unicode テキスト ファイルとしてファイルを比較します。 /W 連続した空白 (タブとスペース) を 1 つのスペースに圧縮して比較 します。 /nnnn 不一致発見後に確認する、一致すべき連続行数を指定します。 [ドライブ1:][パス1]ファイル名1 比較する最初のファイルまたはファイル セットを指定します。 [ドライブ2:][パス2]ファイル名2 比較する 2 番目のファイルまたはファイル セットを指定します。
コマンドスイッチを環境によって判断して使わないと
求める結果には到達できそうにないな、これ。
とにかく、比較をしてみる。
OracleのTRIM関数はある特定の文字しか、半角か全角のどちらかしかトリミングしないので
半角、全角のスペースの両方をちゃんとトリミングするファンクションを作って比較してみることにする。
一つ目、これは正常系
--MULTI_TRIM_1.sqlとする CREATE OR REPLACE FUNCTION MULTI_TRIM ( STR VARCHAR2 ) RETURN VARCHAR2 RESULT_CACHE IS T_STR VARCHAR2(32767); BEGIN /*半角全角スペーストリミング*/ T_STR := LTRIM(RTRIM(STR,' '),' '); RETURN T_STR; EXCEPTION WHEN OTHERS THEN RETURN STR; END;
二つ目。ちょっとバグらせてみる。
--MULTI_TRIM_2.sqlとする CREATE OR REPLACE FUNCTION MULTI_TRIM ( STR VARCHAR2 ) RETURN VARCHAR2 RESULT_CACHE IS T_STR VARCHAR2(32767); BEGIN /*半角全角スペーストリミング*/ T_STR := LTRIM(RTRIM(STR,' '),' '); RETURN W_STR; EXCEPTION WHEN OTHERS THEN RETURN STR; END;
FCコマンドを実行。
タブをスペースに変換しない、行番後を表示、オフライン属性をスキップしない。
fc /T /OFF /N TRIM_MULTI_1.sql TRIM_MULTI_2.sql
この結果、
ファイル TRIM_MULTI_1.sql と TRIM_MULTI_2.SQL を比較しています ***** TRIM_MULTI_1.sql 11: T_STR := LTRIM(RTRIM(STR,' '),' '); 12: RETURN T_STR; 13: EXCEPTION ***** TRIM_MULTI_2.SQL 11: T_STR := LTRIM(RTRIM(STR,' '),' '); 12: RETURN W_STR; 13: EXCEPTION *****
なんで、TRIM_MULTI_2.SQLの拡張子が小文字なのに大文字になっているんだろうね。
比較できたからいいか。
OracleのMULTI_TRIMファンクションの記述はどこかで役に立つと思うので
参考にしてもられば良いと思う。