組込みソフト等,中規模/大規模ソフトを作成ていると他者が作ったソースに自分が変更しようとする RAM が使われており,その下流影響確認を入念に行うことが求められる。
秀丸等で 1 つづず手動で Grep 検索を行うと時間がかかってしまうため,一括で検索する Bat ファイルを書いてみました。
前提
-
Gnu global がインストールされていること
GnuGlobakをダウンロードしローカルドライブに展開ください。 -
GTAGS,GRTAGS ファイル等を作成する
検索したいソース一式が入っているフォルダで DOS コマンドラインを開き,gtags.exe を実行する。 -
LISTFILE.txt を作成する
検索したい RAM 名を 1 行 1 つで記載してください
LISTFILE.txt
ram1
ram2
ram3
ram4
実行方法
-
手段1 LISTFILE.txt を作成手ある場合は, bat ファイルをダブルクリックで実行
-
手段2 listfile を bat ファイルにドラック&ドロップし実行
Bat ファイル
gtagsgrepbytext.bat
@echo off
@REM file指定の連続Grep検索 2022/01/01 sby
@REM - Gnu HPからソフトをダウンロード
@REM Gnu Global https://www.gnu.org/software/global/
@REM Gnu Global(gtags.exe/htags.exe)を展開したフォルダをPathに追加する。
set path=C:\TOOLS\gtags\bin;%PATH%
setlocal enabledelayedexpansion
REM パラメータを設定する
if "%1"=="" (
@REM 引数を持たず実行された場合は初期設定で処理を続ける
SET LISTFILE=LISTFILE.txt
set OUTFOLDER=output_LISTFILE
) else (
SET LISTFILE=%1
set OUTFOLDER=output_%~n1
)
REM 出力フォルダを作成する
if not exist %OUTFOLDER% mkdir %OUTFOLDER%
REM ファイルのLine数をカウント
set linecnt=0
for /F "tokens=1" %%A in ( %LISTFILE% ) do (
set /a linecnt=linecnt+1
)
REM 1 RAMごとに1ファイルで出力
set num=0
for /F "tokens=1" %%A in ( %LISTFILE% ) do (
set /a num=num+1
if not exist %OUTFOLDER%/%%A.txt (
ECHO Global::[ !num! / !linecnt! ] %%A を処理中です
global --grep %%A --result=grep > %OUTFOLDER%\%%A.txt
) else (
ECHO Global::[ !num! / !linecnt! ] %%A は処理済み。処理をPassします。
)
)
endlocal