rmsmf-複数ファイルの複数文字列を置換するコマンドツール

2020年7月16日木曜日

汎用ソースコード&ツール

t f B! P L

rmsmf:Replace Multiple Strings in Multiple Files

rmsmf は複数のテキストファイルに含まれる、複数の文字列を一括で置換できるコマンドツールです。

前書き

最近、GitHub を使い始めた。 これまで git は使用していたが GitHub で自作のソースコードを公開したことは無かった。 少し使用してみると色々面白そうなので、取りあえず様々な現場でよく使いそうなツールやソースコードを、汎用的なコードにして公開していこうかと思っている。

取りあえず、最初は 複数ファイルの複数文字列を置換するコマンド を公開してみる。

システム開発の現場などで、業務用語などが開発中は仮名で定義されていたものが、完成間際になって正式名称が公開され、設計書やソースコードの仮名を全て正式名称に置換してからリリースするという事が度々ある。

この仮名が一つ二つ程度なら、テキストエディタの置換機能で置換できるが、仮名が10個20個になりソースファイルも300とか1000とかになると、手動での置換はほぼ不可能になる。 「どうせソースコードを顧客は見ないから、仮名のままでも良いじゃないか」と言う考え方もあるし、現実的にそれしかない場合は多い。

しかし、後のメンテナンスを考えると業務用語は、正式名称を設計書にもソースコードにも反映していた方が、誤解による不具合や手戻り作業の発生を防ぎやすくなる。

そんな時に複数のソースファイルの仮名を正式名称に一括置換できるのが、この 'rmsmf' である。

Replace Multiple Strings in Multiple Files のそれぞれの単語の頭文字をコマンド名にしている。

似たようなツールは他にも沢山あるが、ソースが公開されていなかったり、GUIツールになっていてシェルスクリプトなどによる自動化が不便だったりするので、CLIツールとして自作した。

機能概要

実行環境 Windows 10 .NET Framework 4.0 以上 開発環境 Visual Studio 2017

コマンドプロンプトで使用するCLIツール。

置換対象文字列(Search word)と置換後文字列(Replace word)を、適当なCSVファイルに記述する。

作成したCSVファイル名をコマンドラインオプション(/r)で指定して、対象ファイルも同時に指定して、コマンド rmsmf を実行する。

置換対象文字列を記載するCSVファイルの例

タイトルや列名などは必要無い。 カンマ区切りで、左側に置換対象文字列(Search word)を、右側に置換後文字列(Replace word)を記入する。

仮名,正式名称
試作ゼロ号機,初号機
試用担当者,第一期運用者
Test 1.0,Release 1.0.0
GPL,Copyright (C) MyHome

仮にCSVファイル名を「T2R.csv」とする。

フォルダー ' .\src ' 配下のC言語ソースファイル全てを置換対象にするとすると、コマンドラインは以下のようになる。

rmsmf /r:T2R.csv .\src\*.c

オプションに紐付ける単語は ' : (コロン) ' で区切りオプションに繋げて入力してください。

オプション以外のパラメータは置換対象ファイル名だけです。 ワイルドカードは使用可能です。 サブフォルダーも検索対象とします。

ファイル一覧ファイルの指定も可能

' .\src*.c ' のような対象ファイルの検索の他に、**'/f:' ** オプションで、予め検索対象ファイルの一覧が記載されたテキストファイルを読み込んで、置換処理を実行する事もできます。

例:

srcList.txt

.\src\beginData.c
.\src\readData.c
.\src\writeData.c
.\src\endData.c

rmsmf /r:T2R.csv /f:srcList.txt

複数の文字コードへの対応

読み込み対象ファイルとCSVファイルの文字コードは '/c' オプションで、置換後ファイルの文字コードは '/w' オプションで指定できます。 デフォルト設定は 'utf-8' になります。 但し、'BOM' のある場合は BOM に従います。

テストしてある文字コードは以下になります。

CharacterSet    EncodingName    CodePage
euc-jp  euc-jp
jis jis
shift_jis   shift_jis
utf-8   utf-8   65001
utf-16 Little En  utf-16  1200
utf-16 Big En    unicodeFFFE 1201
utf-32 Little En  utf-32  12000
utf-32 Big En    utf-32be    12001

Encoding.GetEncoding(encodingName_or_codePage); で対応可能な文字コードは使用可能なはずですが、他はテストしておりません。

CSVファイルとファイル一覧ファイルの文字コード指定

CSVファイルとファイル一覧ファイルの文字コードも個別に指定できます。

'/rc:<CSVファイルのエンコード名>'
'/fc:<ファイル一覧ファイルのエンコード名>'

BOM(Byte Order Mark) の有無指定が可能です

BOM(Byte Order Mark) の有無を '/b' オプションで指定する事が可能です。

'/b:true' を指定するとBOM有りファイルを出力します。 '/b:false' を指定するとBOM無しファイルを出力します。

例:

rmsmf /r:T2R.csv .\doc\*.txt /b:false

オプションの位置はどこでも良いです。

rmsmf /b:false /r:T2R.csv .\doc\*.txt

でも、

rmsmf /b:false .\doc\*.txt /r:T2R.csv

でも構いません。

'/b' だけなら '/b:true' と判別します。 '/b:false''/b:no' とも '/b:n' とも表記可能です。

文字コードだけ変換する

'/r' オプションを指定しなければ、文字コードとBOMの変換だけを行います。

例: shift_jisコードからBOM有りutf-8コードへの文字コード変換

rmsmf .\*.txt /c:shift_jis /w:utf-8 /b:true 

例: BOM有りutf-8から、BOM無しutf-8への変換

rmsmf .\*.txt /c:utf-8 /w:utf-8 /b:false 

rmsmf .\*.txt /b:n 

GitHub の URL

GitHub_rmsmf

GitHub_rmsmf_exe_Download (rmsmf-0.9.3.3-AnyCPU.zip)

ZIPファイルを解凍して、exe を PATH の通ったフォルダーに配置すれば使えます。

rmsmf-0.9.3.3-x64.zip は 64bit版

rmsmf-0.9.3.3-x86.zip は 32bit版です。

----2021年1月6日追記----

rmsmf-0.9.3.0 でリファクタリングを行いソースを読みやすくしました。

また、文字エンコーディングの自動判定機能を追加し、shift-jis や euc-jp, jis でも、読み込み文字エンコーディングをオプション指定しなくても、使用できるようになりました。

お試しください。

------------------------

rmsmf /h 

で Help が表示されます。

不具合などあれば GitHub からご連絡ください。

自己責任でのご利用をお願いします。 損害賠償などには応じられません。

安全な利用方法として、置換対象ファイルは別途にバックアップを保存してからコマンドを実行する事をお勧めします。

このブログを検索

Translate

人気の投稿

自己紹介

自分の写真
オッサンです。実務経験は Windows環境にて C#,VB.NET ,SQL Server T-SQL,Oracle PL/SQL,PostgreSQL,MariaDB。昔はDelphi,C,C++ など。 趣味はUbuntu,PHP,PostgreSQL,MariaDBかな ?基本無料のやつ。

QooQ