プチIT化 PR

VBScriptでテキストファイル特定の行を別ファイルに抽出する

記事内に商品プロモーションを含む場合があります。
当サイトは、アフィリエイト広告を利用しています。

こんにちは!今回はVBSctiptでテキストファイルから、別のファイルへ特定の行を抜き出すというサンプルスクリプトを紹介します。

悩める人
悩める人
テキストファイルの特定の行だけを抜き出したいな。

と、とある日になりました。同じフォーマットファイルで特定の行のみ必要な場合があり、いちいちファイルを開いて行をコピーして別ファイルに貼り付けする、という作業が面倒になったのです。

ということで、行を指定して特定行のみ抜き出すサンプルスクリプトを作ってみましたので、紹介します。

  • 入力ファイル(抜き出したいデータがあるファイル)
  • 出力ファイル
  • 抜き出したい行(開始行と終了行)

を指定するだけで入力ファイルから指定した開始行から終了行を抜き出し別ファイルに書き出すスクリプトになります。

それでは、いってみましょう!

特定行を抜き出すサンプルスクリプト

早速、サンプルスクリプトとその使い方を載せます。

Option Explicit

'----------
' 変数定義
'----------
Dim filePath
Dim outputFSO
Dim outputFile
Dim inputFSO
Dim inputFile
Dim countRow
Dim tmpStr
Dim outputFilePath
Dim inputFilePath
Dim extractRowS
Dim extractRowE


'----------
' 初期設定
'----------
'★行指定して抜き出ししたい入力ファイルパスを指定
inputFilePath = "C:\test\1.txt"
'★出力したい場所、出力ファイルパスを指定
outputFilePath = "C:\test\output.txt"
'★抽出したい行(開始行)
extractRowS = 5
'★抽出したい行(終了行)
extractRowE = 7


'----------
' 処理
'----------
'出力ファイルの準備
Set outputFSO = CreateObject("Scripting.FileSystemObject")
Set outputFile = outputFSO.CreateTextFile(outputFilePath, True)
'入力ファイルの準備
Set inputFSO = CreateObject("Scripting.FileSystemObject")
Set inputFile = inputFSO.OpenTextFile(inputFilePath)

'行数カウント用初期化
countRow = 0

'ファイル内処理:1行ずつ読み込み処理
Do While inputFile.AtEndOfStream <> True
	tmpStr = inputFile.ReadLine
	countRow = countRow + 1
	If countRow >= extractRowS and countRow <= extractRowE Then
		outputFile.Write(tmpStr)
		If countRow <> extractRowE Then
			outputFile.Write(vbCrLf)
		End If
	End If
Loop

'ファイルクローズ
inputFile.Close
outputFile.Close

'オブジェクトの解放
Set inputFSO = Nothing
Set outputFSO = Nothing

使い方

使い方としては、「初期設定」の部分に必要情報を入力して実行(vbsファイルをダブルクリックなど)すればOKです。各初期設定の変数の説明は以下の通りです。

inputFilePath抜き出したいデータがあるテキストファイルを指定します。
テキストファイルが保存してあるファイルパスを記入します。
outputFilePath特定行を抜き出したあと、そのデータを書き出すテキストファイルを指定します。ファイルパスで記入します。
※ファイルパスに指定したファイルが存在しない場合は、指定したファイルパスに新規作成されます。
extractRowS抽出開始行を指定します。行の数字を記入。(指定した行も含む)
extractRowE抽出終了行を指定します。行の数字を記入。(指定した行も含む)

もし、複数ファイルの場合はフォルダ内でファイル数分ループしたりすると良いかなと思います。複数ファイルのアレンジについては、後日追記できるといいな思います。