テキストファイル中の文字数と行数をカウントするVBScript
あなたはブログを書いていますか?
記事を書く際、ブログのエディタに直接打ち込んでいますか?それとも、自分のPC上のテキストエディタで一度書いて、それをブログのエディタにコピー&ペーストしていますか?
僕は、自分のPC上のテキストエディタで書いています。
そうすれば、万一、レンタルサーバが飛んでデータが全消去されてしまっても、最低限のバックアップは残ります。また、出先で隙間時間を見つけて、新しい記事を少しずつ書き進めることもできます。
ところで、ご存知の通り、ブログのアクセス数を増やすためには、記事当りの文字数が重要な要素の一つとされています。例えば、1記事あたり1,000字以上などと言われています。
通常のブログのエディタでは、文字数のカウント機能があると思います。
でも、メモ帳をはじめとするPC上のテキストエディタには、文字数のカウント機能がありません。一行あたりの文字数と行数を掛け算しても、かなりの誤差が出てしまいます。
そこで、テキストファイル中の文字数と行数をカウントするVBScriptを書いてみました。
Windowsパソコンでしたらどんな環境でも動作すると思いますので、必要に応じてお使い頂ければと思います。
使い方は次の通りです
- メモ帳を起動する
- スクリプトをコピーする
- メモ帳に貼りつける
- 分かりやすいファイル名(例:CountLetters)をつけて保存する
- ファイルの拡張子を「txt」から「vbs」に変更する
→拡張子が見えない場合はWindowsのバージョンに応じた設定が必要です
→単純な横罫のアイコンからS字型をしたアイコンに変わります - 文字数をカウントしたいファイルをそのアイコンの上にドラッグ&ドロップする
- 文字数と改行数が表示される
スクリプト
Option Explicit
' ファイル内の文字数をカウントするVBScript
' ─── 定数宣言 ───
Const cstCreate = True ' ファイルが無ければ作成しながら開く
Const cstForReading = 1 ' 読み出し専用で開く
Const cstForWriting = 2 ' 書き込み専用で開く
Const cstForAppending = 8 ' 追記のために開く
' ─── 変数宣言 ───
Dim blnRet ' 論理型関数の戻り値
Dim lngCnt ' 文字数カウンタ
Dim lngCntCrLf ' 改行数カウンタ
Dim objCsv ' 出力用CSVファイルオブジェクト
Dim objFS ' ファイルシステムオブジェクト
Dim objSourceFile ' 文字数カウント対象のファイル用オブジェクト
Dim strArguments ' 本プログラムへの引数保持
Dim strBaseName ' VBScriptの名前
Dim strExtension ' 拡張子
Dim strCsv ' 出力用CSVファイル名
Dim strSourceFile ' 文字数カウント対象のファイル名
' ─── メインプログラム ───
' ファイルシステムオブジェクトをインスタンス
Set objFS = CreateObject("Scripting.FileSystemObject")
' VBScriptの名前を取得する
strBaseName = objFS.GetBaseName(Wscript.ScriptName) & "." & _
objFS.GetExtensionName(Wscript.ScriptName)
' 引数がなければ何もしない
If Wscript.Arguments.Count = 0 Then
Call MsgBox("ファイルをドラッグ&ドロップして下さい", vbOkOnly, strBaseName)
Set objFS = Nothing
WScript.Quit
End if
' 引数をドロップされたファイルとして文字配列にセット
Set strArguments = Wscript.Arguments
' ファイルの存在をチェック
If objFS.FileExists(strArguments(0)) = False Then
Call MsgBox(strArguments(0) & "は存在しません", vbOkOnly, strBaseName)
Set objFS = Nothing
WScript.Quit
End If
' 拡張子を小文字で取得
strExtension = LCase(objFS.GetExtensionName(strArguments(0)))
' テキストファイルであることを確認する
Select Case strExtension
Case "csv", "log", "txt"
Case Else
Call MsgBox("拡張子" & strExtension & "は使えません", _
vbOkOnly, strBaseName)
Set objFS = Nothing
WScript.Quit
End Select
' 文字数と改行数のカウンタをクリア
lngCnt = 0: lngCntCrLf = 0
' ドロップされたファイル名を内部変数に保持
strSourceFile = strArguments(0)
' 読み込み専用としてファイルを開く
Set objSourceFile = _
objFS.OpenTextFile(strSourceFile, cstForReading)
' EOFまでループ
Do Until objSourceFile.AtEndOfStream
' 文字数をカウント
lngCnt = lngCnt + Len(objSourceFile.ReadLine)
' 改行数をカウント
lngCntCrLf = lngCntCrLf + 1
Loop
' 文字数の表示
Call MsgBox("文字数: " & lngCnt & " 文字" & vbCrLf & _
"改行数: " & lngCntCrLf & " 個", vbOkOnly, strBaseName)
' 読み込み用ファイルのクローズとオブジェクトの解放
Call objSourceFile.Close
Set objSourceFile = Nothing
' 結果をCSVファイルに保存する
If False Then
' 出力用CSVファイル名を決める
strCsv = objFS.GetFile(Wscript.ScriptFullName).ParentFolder & _
"\" & objFS.GetBaseName(Wscript.ScriptName) & ".csv"
' ファイルの存在を調べる
blnRet = objFS.FileExists(strCsv)
' CSVファイルを追記モードで開く
Set objCsv = objFS.OpenTextFile( strCsv, cstForAppending, cstCreate)
' ファイルを新規で作った場合タイトル行を作る
If blnRet = False Then
objCsv.WriteLine("実施日,時刻,ファイル名,文字数,改行数")
End If
' CSVファイルに文字数等を追記する
Call objCsv.WriteLine (Date & "," & Time & "," & _
Mid(strSourceFile, InstrRev(strSourceFile, "\") + 1) & _
"," & lngCnt & "," & lngCntCrLf)
' CSVファイルのクローズとオブジェクトの解放
Call objCsv.Close
Set objCsv = Nothing
End If
' オブジェクトの解放
Set objFS = Nothing
Set strArguments = Nothing
使用上の注意
受け付ける拡張子
初期状態では拡張子として、「csv」「log」「txt」を受け付けるようにしています。
この設定を変更するには、VBScriptをテキストエディタで開き、45行目の
Case “csv”, “log”, “txt”
を変更して下さい。
例えば、「log」の受付をやめて、「vbs」を受け付けるようにするには、
Case “csv”, “txt”, “vbs”
のようにします。拡張子は小文字で記述して下さい。また、二重引用符の中に、スペースが入らないように気をつけて下さい。順序は問いません。
初めはコピーしたファイルでお試しください
ドラッグ&ドロップされたファイルは読み取り専用で開きます。しかし、使い方により、想定外の動作をすることがある可能性があります。当初は念のため、コピーしたファイルを使って下さい。
大切なファイルが破損したとしても、当方は責任を取ることができません。
動作ログも取れます
このVBScriptは動作ログを取ることができます。
現在、75行目は、
If False Then
となっていますが、この「False」を「True」に変更するだけです。すなわち、
If True Then
とします。
そうすると、CSVファイルの形式でログがVBScriptと同じフォルダ内に保存されます。
実行した時間も記録するので、気が向いたときに文字数をカウントさせれば、あとからExcelで時間当たりの執筆文字数も計算することができて便利です!
出力サンプルを示します。
実施日,時刻,ファイル名,文字数,改行数
2019/09/07,23:08:53,CountLetters.vbs,2844,106
まとめ
テキストファイル中の文字数と行数をカウントするVBScriptを書いてみました。
必要に応じてお使いください。
コメント