様々な基本になるサンプルを記録しています。

不定期更新です。

記事のサイドに使用している商品の紹介も掲載しているので、良ければご覧ください。

【コマンドプロンプト】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ファンクションの記述はどこかで役に立つと思うので
参考にしてもられば良いと思う。