【バッチスクリプト】ファイル内から全角スペース、半角スペースの削除および、文字列置換する処理


いつもお世話になっております。
RfromLです。

今回はファイル内から全角スペース、半角スペースを削除し、指定の文字列を置換してファイル出力する処理についてです。

1.はじめに

以前「【バッチスクリプト】ファイル内から特定の文字列を削除してファイル出力する」で作成したバッチスクリプトを基に、レコード単位で全角スペース・半角スペースの削除、文字列置換を行う処理を作成します。


2.使用コマンド

全角スペース・半角スペースの削除、指定文字列の置換には「set」コマンドの変数置換により行います。

以下、setコマンドのヘルプ(コマンド「set /?」の実行結果)より

環境変数の置換は、次のように拡張されます:

    %PATH:文字列 1 = 文字列 2%

は、PATH 環境変数を展開し、その結果に含まれるすべての "文字列 1" を
文字列 2 に置き換えます。
文字列 2 に空の文字列を指定すると、展開された出力からすべての "文字列 1"
を削除することができます。

ヘルプの記載から全角・半角スペースの削除、指定文字列の置換は以下のコマンドとなります。

コマンド例

set 変数=%変数:全角スペース =%
set 変数=%変数:半角スペース =%
set 変数=%変数:置換前文字列 =置換後文字列%

イコールの右側に空文字(ブランク)をセットしている部分は「変数」の中に含まれる全角・半角スペースが削除(空文字に置換)されます。
イコールの右側に置換先文字列をセットしている部分は「変数」の中に含まれる置換前文字列が、置換後文字列に置換されます。


3.作成スクリプト

3-1.コード内容

今回作成したスクリプトファイルのコード内容は以下の通りです。

[ CharDel2.bat ]

@rem ------------------------------------------------------------
@rem 初期処理
@rem ------------------------------------------------------------
@rem 実行バッチファイルディレクトリ設定
set CMD_PATH=%~dp0

@rem 処理ID設定(バッチファイル名)
set BATCH_ID=%~n0

@rem 処理開始メッセージ表示
echo %BATCH_ID% %DATE:~0,4%年%DATE:~5,2%月%DATE:~8,2%日 %TIME:~0,2%時%TIME:~3,2%分%TIME:~6,2%秒 処理開始

@rem ------------------------------------------------------------
@rem ファイルディレクトリ設定
@rem ------------------------------------------------------------
@rem 入力ファイルディレクトリ
set IDIR=%CMD_PATH%IN

@rem 出力ファイルディレクトリ
set ODIR=%CMD_PATH%OUT

@rem ------------------------------------------------------------
@rem ファイルID設定
@rem ------------------------------------------------------------
@rem 入力ファイルID
set IFILEID001=INFILE.txt

@rem 出力ファイルID
set OFILEID001=OUTFILE.txt

@rem ------------------------------------------------------------
@rem ファイル設定
@rem ------------------------------------------------------------
@rem 入力ファイル
set IFILE001=%IDIR%\%IFILEID001%

@rem 出力ファイル
set OFILE001=%ODIR%\%OFILEID001%

@rem ------------------------------------------------------------
@rem 前処理 : 出力ファイルクリア処理
@rem ------------------------------------------------------------
if exist "%OFILE001%" del "%OFILE001%"

@rem ------------------------------------------------------------
@rem ファイル編集出力処理
@rem ------------------------------------------------------------
@rem 遅延環境変数有効
setlocal enabledelayedexpansion

@rem 入力レコードカウンター初期化
set ICNT=0

@rem 出力レコードカウンター初期化
set OCNT=0

@rem 入力ファイル読込
for /F "usebackq tokens=*" %%a in ("%IFILE001%") do (

  @rem 入力レコード件数カウントアップ
  set /A ICNT=!ICNT!+1

  @rem ワーク領域にレコードを格納
  set WORKSTR=%%a

  @rem 文字列「 」(半角スペース)を削除
  set WORKSTR=!WORKSTR: =!

  @rem 文字列「 」(全角スペース)を削除
  set WORKSTR=!WORKSTR: =!

  @rem 文字列「法人」を「Corporation」に置換
  set WORKSTR=!WORKSTR:法人=Corporation!

  @rem データレコード出力
  @echo !WORKSTR!>> "%OFILE001%"

  @rem 出力レコード件数カウントアップ
  set /A OCNT=!OCNT!+1

)

@rem 入力レコード件数表示(頭ゼロ埋め5桁)
set ZEROPAD-ICNT=00000!ICNT!
@echo   I-FILE !ZEROPAD-ICNT:~-5!件 [ %IFILEID001% ]

@rem 出力レコード件数表示(頭ゼロ埋め5桁)
set ZEROPAD-OCNT=00000%OCNT%
@echo   O-FILE %ZEROPAD-OCNT:~-5%件 [ %OFILEID001% ]

@rem 遅延環境変数無効
endlocal

@rem ------------------------------------------------------------
@rem 終了処理
@rem ------------------------------------------------------------
:END

@rem 処理終了メッセージ表示
echo %BATCH_ID% %DATE:~0,4%年%DATE:~5,2%月%DATE:~8,2%日 %TIME:~0,2%時%TIME:~3,2%分%TIME:~6,2%秒 正常終了

@rem 表示メッセージ確認の為、処理一時停止
pause

exit /b 0

※メッセージを確認するため、正常終了処理のブロックに「pause」を記載して処理を一時停止するようにしています。

3-2.ディレクトリ構成

作成したバッチスクリプトを実行する際のディレクトリ構成です。

3-3.入力ファイル仕様

[ ファイル項目 ]

No項目
1証券コード
2投資法人名
3価格(円)
4分配金利回り(%)
51口NAV(円)
6NAV倍率
7時価総額(百万円)
8出来高(口)
9決算期 (月)
10運用資産

区切り文字:タブ
改行コード:CRLF
文字コード:S-JIS

3-4.入力ファイル内容(テストファイル)

[ データ内容 ]

9995    ,ムーン投資法人,704000,1.15,3.27,580525,1.21,1197498,4119,6
9996,サターンファンド投資法人,640000,0.47,3.52,587832,1.09,886534,3398,3                  
9997,ジュピター投資法人,105800,0.09,4.28,108104,0.98,739446,22234, 2
9998,金星投資法人,190500,0.79,3.98,191036,1.00,525780            ,9391,2
9999,太陽投資法人,401500     ,0.50,3.86,379771,1.06,400367,2029,6

3-5.機能説明

①ディレクトリ「IN」配下に格納されたファイル「INFILE.txt」を読み込む
②レコード内に含まれる半角スペースをsetコマンドで削除する
③レコード内に含まれる全角スペースをsetコマンドで削除する
④レコード内に含まれる文字列「法人」をsetコマンドで「Corporation」に置換する
⑤文字列を削除後のレコードをファイル出力する。


4.実行結果確認

①入力ファイルの内容を確認
処理対象1.全角スペース(削除する対象)
処理対象2.半角スペース(削除する対象)
処理対象3.法人(「Corporation」に置換する対象)

②ファイル出力先のディレクトリにファイルがなにも無いことを確認。

③バッチスクリプトをダブルクリックして実行

④表示されたメッセージからコピー処理が実行されていることを確認

⑤出力ファイルの内容を確認

入力ファイルからすべての全角スペース、半角スペースが削除されていることを確認。また、「法人」が全て「Corporation」に置換されていることを確認。

以上です。
宜しくお願い致します。

<br>
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4890125813980946"
     crossorigin="anonymous"></script>
<!-- ディスプレイ横長_03_記事末 -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4890125813980946"
     data-ad-slot="3813004694"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>
タイトルとURLをコピーしました