PowerShell でファイル比較 (解説・後半 2/2)

最後に、判定処理について解説します。

 

 

最初に、「 $K 」,「 $H 」という2つの変数を定義しています。

どちらも、その中身には ” (Get-Content テキストファイル名)[行] ” を格納しているのですが、これは一度テキストファイルの全文を読み込んでから、指定の行の文字列を抜き出すというものです。

これにより、基準となる「kijun.txt の $LN 行目」と、比較対象となる「hikakutaishou.txt の $LN 行目」の文字列を抜き出すことができます。

 

 

次はそれらが一致しているか否かを判定するのですが、判定自体は、前半でも使った比較演算子 ” -eq ” を使えば簡単です。

両文字列が完全に同じものであれば「True」、少しでも違えば「False」という実行結果になります。

 

 

各行の実行結果を、そのまんま一行ずつ「kekka.txt」に出力しても良いのですが、何行目が「True」で何行目が「False」なのかが分かりやすいよう、一工夫します。

実行結果がどちらであれ、まずそれを「 $C 」という変数に格納します。

次に、判定対象行を示す変数「 $LN 」に、+1 し、新たな変数「 $LN2 」に格納します。

※ +1 するのは、PowerShell 上で「ゼロ」から始まる行数を、人間にも分かりやすい「1」から始まる行数に直すためです。

最後に、$LN2 と $C を連結して一続きの文字列にします。

こうすれば、何行目が「True (あるいは False ) 」なのかが分かりやすく出力されます。

 

 

しかし、連結には注意が必要です。前半でやったように、単純に「+」で並べる事は出来ません。

それをしてしまうと、「True = 1」、「False = 0」と見做して足し算が行われてしまいます。

 

 

このような場合は、” -join ” という配列演算子を用いて連結ます。

先に「 $R 」という変数を定義し、 $LN2 と $C を「カンマ区切り」で格納します。

これだけだと、$R の中身は「改行された二行のテキスト」になってしまうのですが、次に $R -join ” : “ を実行することで「コロンによって連結された一行のテキスト」に変換できます。

それを「kekka.txt」に出力することで、「何行目が一致していて、何行目が不一致なのか」が分かるようになります。

 

 

以上で、2013年12月24日の記事に書いたスクリプトの解説は終了です。

が、しかし・・・・

ちょっと書き足りないことがあるので補足編に続きます。