テキストファイルの文字数をカウントするVBScriptを作ってみた

テキストファイル中の文字数と行数をカウントするVBScript

あなたはブログを書いていますか?

記事を書く際、ブログのエディタに直接打ち込んでいますか?それとも、自分のPC上のテキストエディタで一度書いて、それをブログのエディタにコピー&ペーストしていますか?

僕は、自分のPC上のテキストエディタで書いています。
そうすれば、万一、レンタルサーバが飛んでデータが全消去されてしまっても、最低限のバックアップは残ります。また、出先で隙間時間を見つけて、新しい記事を少しずつ書き進めることもできます。

ところで、ご存知の通り、ブログのアクセス数を増やすためには、記事当りの文字数が重要な要素の一つとされています。例えば、1記事あたり1,000字以上などと言われています。

通常のブログのエディタでは、文字数のカウント機能があると思います。
でも、メモ帳をはじめとするPC上のテキストエディタには、文字数のカウント機能がありません。一行あたりの文字数と行数を掛け算しても、かなりの誤差が出てしまいます。

そこで、テキストファイル中の文字数と行数をカウントするVBScriptを書いてみました
Windowsパソコンでしたらどんな環境でも動作すると思いますので、必要に応じてお使い頂ければと思います。

使い方は次の通りです


  1. メモ帳を起動する
  2. スクリプトをコピーする
  3. メモ帳に貼りつける
  4. 分かりやすいファイル名(例:CountLetters)をつけて保存する
  5. ファイルの拡張子を「txt」から「vbs」に変更する
    →拡張子が見えない場合はWindowsのバージョンに応じた設定が必要です
    →単純な横罫のアイコンからS字型をしたアイコンに変わります
  6. 文字数をカウントしたいファイルをそのアイコンの上にドラッグ&ドロップする
  7. 文字数と改行数が表示される
文字数と改行数

文字数と改行数

スクリプト

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を書いてみました。
必要に応じてお使いください。

コメント

タイトルとURLをコピーしました