こんにちは。業務自動化の世界へようこそ。
長年、数多のレガシーシステムと格闘してきた私から見れば、VBScriptは「枯れた技術」などではなく、今なおWindows環境で最も軽量かつ強力な「魔法の杖」です。
今日は、現場で誰もが一度は直面する「改行コードの闇」を、FSO(FileSystemObject)を使ってスマートに浄化する方法を伝授しましょう。
—
なぜ「改行コード」が現場を混乱させるのか
Linuxで作成されたログファイルや設定ファイルをWindowsで開くと、改行が無視されて一行に繋がって表示されたり、逆に変な記号が混じったりした経験はありませんか?
- CRLF (`\r\n`): Windowsの標準。
- LF (`\n`): Linux/macOSの標準。
- CR (`\r`): 古いMacの遺産。
VBScriptでこれらを扱う際、何も考えずに読み込むと、OSやエディタの解釈がブレてシステムが異常終了する原因になります。今回は、これらをすべてWindows標準の「CRLF」に統一する堅牢なツールを作ります。
FSOを掌握する:今回のアーキテクチャ
VBScriptでファイルを扱うなら、`Scripting.FileSystemObject`(通称FSO)は必須の武器です。以下の手順で処理を進めます。
1. Read(読み込み): ファイルの内容をまるごとメモリに読み込む。
2. Replace(置換): 正規表現の力で「バラバラな改行」を「特定の記号」に一時変換。
3. Normalize(正規化): 一旦すべてLFにしてから、WindowsのCRLFへ強制置換する。
4. Write(書き出し): 新しいファイルとして保存する。
実装:改行コード標準化スクリプト
以下のコードをコピーし、メモ帳に貼り付けて `.vbs` 拡張子で保存してください。
Option Explicit
‘ ———————————————————
‘ 【改行コード統一ツール】
‘ 入力ファイルの改行をWindows標準(CRLF)に変換します
‘ ———————————————————
Dim fso, inputFile, outputFile
Dim content, sourcePath, destPath
‘ パス設定(適宜書き換えてください)
sourcePath = “C:\temp\input.txt”
destPath = “C:\temp\output_normalized.txt”
Set fso = CreateObject(“Scripting.FileSystemObject”)
‘ ファイルが存在するかチェック
If Not fso.FileExists(sourcePath) Then
WScript.Echo “エラー:ファイルが見つかりません。”
WScript.Quit
End If
‘ 1. ファイルを全読み込み
content = fso.OpenTextFile(sourcePath, 1).ReadAll
‘ 2. 改行コードの正規化処理
‘ まずCR+LFをLFに統一し、次に残ったCRをLFに統一することで「すべての改行をLF」にする
content = Replace(content, vbCrLf, vbLf)
content = Replace(content, vbCr, vbLf)
‘ 3. Windows標準のCRLFへ変換
content = Replace(content, vbLf, vbCrLf)
‘ 4. ファイルへ書き出し
Set outputFile = fso.CreateTextFile(destPath, True)
outputFile.Write content
outputFile.Close
Set outputFile = Nothing
Set fso = Nothing
WScript.Echo “完了:改行コードをCRLFに統一しました。”
—
ここがプロのこだわり:知っておくべきポイント
1. なぜ「全置換」を繰り返すのか?
`Replace(content, vbCrLf, vbLf)` を最初に行うのがコツです。いきなりCRLFを無視して処理すると、CRとLFが別々に残ってしまい、期待通りの変換ができません。「一度すべて同じ形(LF)に揃えてから、最後に目的の形(CRLF)へ整える」。これがデータ変換の鉄則です。
2. `Option Explicit` の魔力
コードの冒頭に書いた `Option Explicit`。これは「変数の宣言を強制する」というお守りです。初心者のうちは面倒に感じるかもしれませんが、これを書かないとスペルミスで予期せぬバグを生みます。プロを目指すなら、最初から必ず記述する習慣をつけてください。
3. メモリ管理の意識
`Set fso = Nothing` を最後に書いていますね。VBScriptは自動でメモリ解放されますが、大規模なバッチ処理で何千ものファイルを扱う際、この「後片付け」を明示する習慣が、あなたの書くスクリプトの信頼性を高めます。
—
最後に:ここをクリアすればあなたはもう初心者ではない
このスクリプトを動かすことができたら、あなたは「ファイルシステムというOSの深淵」に触れたことになります。
- 応用編: `Folder` オブジェクトを使って、指定フォルダ内の全テキストファイルを一括変換するループ構造に拡張してみましょう。
- 注意点: 非常に巨大なファイル(数百MB超)を読み込む場合は、`ReadAll` ではなく `ReadLine` で一行ずつストリーム処理を行う必要があります。
VBScriptは古い言語と言われますが、「OSの標準機能だけで完結する」というポータビリティは、現代のクラウド時代においても最強の武器です。
このコードを足がかりに、ぜひあなたの業務を、もっと自由で創造的なものに変えていってください。応援していますよ。
