CAD日記

主にAutoCADのことについて書いているけど、近頃は投資系ネタに注力している。自動売買、仮想通貨、PC関係、プログラミングなど。@caddiary

ソフト開発

WinMergeで複数拡張子を対象とするファイルフィルタと簡単な行フィルタ指定をやってみた

投稿日:

WinMergeでファイル比較することは、SEだったらみんなやっていることと思う。でもファイルフィルタと行フィルタは使ったことがないと思う。おいらだって、何年もWinMergeを使ってきたけど、正規表現がさっぱりわからんから使ったことなかった。いや、デフォルトで用意されているファイルフィルタの「Visual C++ loose」なんかは使ったことあった。それが拡張子fltのテキストファイルで、正規表現で中身をいじれば思うようなことができることは知っていた。いかんせん、正規表現という小難しそうなルールに対して高いハードルを感じていて、もう一歩アプローチできなかったのだ。えらそうにこんな記事を書いてはいるものの、どっかのサイトの受け売りで書いただけだった。
WinMegeのフィルタについて今すぐ知りたいならココを読め

ということで、今回は初歩的かつ誰もがやりたがるであろう簡単なフィルタを作ってみることにした。

1.ファイルフィルタで複数の拡張子を指定する方法
フィルタ指定のところの初期値は「*.*」となっている。「*.txt」とすれば単一の拡張子指定ができることはわかっているが、複数拡張子を指定するべく「*.txt;*.csv」なんて指定しても無駄。DFという名のフリーソフトだったらできることだが、WinMergeではできましぇん。

よって、ファイルフィルタをつくる必要性が出てくる。以下に拡張子fltのファイルをそのまま記載する。ファイルそのものをダウンロードするならここをクリック。
## This is a directory/file filter template for WinMerge
name: txtとcsvを対象
desc: 複数拡張子を指定するテスト

## Select if filter is inclusive or exclusive
## Inclusive (loose) filter lets through all items not matching rules
## Exclusive filter lets through only items that match to rule
## include or exclude
def: exclude

## Filters for filenames begin with f:
## Filters for directories begin with d:
## (Inline comments begin with ” ##” and extend to the end of the line)
f: \.txt$
f: \.csv$

nameとdeskは、ファイルフィルタ一覧に出る名称と説明。
defは、includeかexcludeの選択。指定したものだけを対象にするならexcludeで、指定したものを除外するならinclude。
f:はファイル名指定で、「.txt」が末尾にあるファイルを対象とする。末尾を表すのが$で、.を表現するにはその前に\を書くので\.となる。
他にd:という指定があってフォルダ名を指定することができるがここでは不要。

2.行フィルタで前方一致の行を除く
^abc
先頭を表すのが^(山型)で、abcから始まる行という意味になる。
行フィルタは、ファイルフィルタのようにファイルを用意することがなくダイアログから値を入力して使う。

3.行フィルタで後方一致の行を除く
xyz$
後方を表すのが$(ドル)で、xyzで終わる行という意味になる。

4.行フィルタで前方一致と後方一致の両方で行を除く
^abc.*xyz$
2と3の組み合わせだが、そのあいだに.*(ドットとアスタリスク)が入っている。
.*によって、その位置に何か文字があるかもしれないという意味になる。
ドット:(空白文字以外の)なんでもよい文字
アスタリスク:直前のパターンが0回以上の繰り返し(0回を含むので何もなくてもよい)

このあたりが、正規表現の難しいところだな。
正規表現については、本が1冊書けるくらいの複雑な仕組みらしい。その全貌を知る必要はなく、最低限のことを把握すればよい。近々以下のサイトで勉強してみようかね。
正規表現とは?

-ソフト開発

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

VC2017でWindowsの環境変数を取得する方法

C++のUnicodeプロジェクトにおいて、_wgetenvでWindowsの環境変数が取得できるのはわかる。 こんなソースがあって、ビルドしたらエラーになった。 void CMFCApplicati …

Teigha改めODAでDWGをDXFに変換するプログラムをつくってみよう!【Part.2】

Part.1ではあれこれと前提の話を書いたわけだが、今回は実際にVCのプロジェクトを作る準備をしてみよう。 1.ODAモジュールのダウンロード 2019 Update 2のKernelとDrawing …

PDFアレコレで捺印まわりのバグ修正

PDFアレコレをバージョンアップ。約3か月ぶり。 Ver3.02 2020/10/24 ・捺印などのPDF編集操作後にファイルを閉じて開いて、再編集すると以前編集していたPDFが復活していた。閉じると …

no image

TEMPフォルダ書き込みエラーが頻発したのはなぜだろう

「環境変数TEMPトラブルについて振り返る」という記事に書いた出来事は1か月ほど前に起きたことでありWindows Serverでもあったから、レアな事象としてとらえていたが、一昨日の金曜日に起きたこ …

コピー元でzip圧縮後にネットワーク越しにファイルコピーしてコピー先で解凍するのを自動化できないか

コピー元でzip圧縮後にネットワーク越しにファイルコピーしてコピー先で解凍するのを自動化できないか。。とここ数日考えていた。そんなことをしたい理由と要件をはっきりさせておく。 対象のファイルやフォルダ …