★ぴったりの回答には 500pt ~★
■やりたいこと
あるフォルダに html ファイルが大量にあります。100 以上と考えてください。各ファイルの文字数/単語数を調べて一覧にしたいと思います。
たとえば、Word VBA でフォルダ内の *.html を 1 つずつ開いてワードカウントの情報 (単語数、文字数など各種の情報) を取得して Word 内の表に並べていくとか、Excel シートに並べていくとか・・・
質問などあればコメント欄にどうぞ
よろしくお願いします。
Win XP Home, Word 2003, Excel 2003
WSHが一番適切と思いましたので、スクリプトを作ってみました。
Option Explicit Const wdStatisticWords = 0 Const wdStatisticLines = 1 Const wdStatisticPages = 2 Const wdStatisticCharacters = 3 Const wdStatisticParagraphs = 4 Const wdStatisticCharactersWithSpaces = 5 Const wdStatisticFarEastCharacters =6 Dim strArg Dim objFSO, objWord, objDoc, objRng Dim objFolder, objFile Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set objWord = CreateObject("Word.Application") objWord.Visible = True ' 表示が煩わしいならコメントにする Wscript.Echo "ファイル名,文字数,単語数" For Each strArg In WScript.Arguments Set objFolder = objFSO.GetFolder(strArg) For Each objFile In objFolder.Files ' htmも許すときは適宜変更ください If Lcase(Right(objFile.Name, 5)) = ".html" Then Set objDoc = objWord.Documents.Open(objFile.Path) Set objRng = objWord.ActiveDocument.Content ' ディレクトリ不要なら objFile.PathをobjFile.Nameに変更ください Wscript.Echo objFile.Path & "," & _ objRng.ComputeStatistics(wdStatisticCharacters) & "," & _ objRng.ComputeStatistics(wdStatisticWords) objWord.Documents.Close Set objDoc = Nothing Set objRng = Nothing End If Next Next objWord.Quit
●使い方
cscript wordinfo.vbs . aaaa >output.csv
wordinfo.vbsの後ろには、調べたいディレクトリを書きます(複数可)。
カレントなら「.」、相対なら「aaaa」のように、当然「C:\hproot」のように絶対パスもOKです。
最後に「>output.csv」のようにリダイレクトしてファイルに落としています。始めは、この「>output.csv」をつけなければ画面に表示されますので、その後でリダイレクトしてファイルに落とすのがいいかも知れません。
WSHが一番適切と思いましたので、スクリプトを作ってみました。
Option Explicit Const wdStatisticWords = 0 Const wdStatisticLines = 1 Const wdStatisticPages = 2 Const wdStatisticCharacters = 3 Const wdStatisticParagraphs = 4 Const wdStatisticCharactersWithSpaces = 5 Const wdStatisticFarEastCharacters =6 Dim strArg Dim objFSO, objWord, objDoc, objRng Dim objFolder, objFile Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set objWord = CreateObject("Word.Application") objWord.Visible = True ' 表示が煩わしいならコメントにする Wscript.Echo "ファイル名,文字数,単語数" For Each strArg In WScript.Arguments Set objFolder = objFSO.GetFolder(strArg) For Each objFile In objFolder.Files ' htmも許すときは適宜変更ください If Lcase(Right(objFile.Name, 5)) = ".html" Then Set objDoc = objWord.Documents.Open(objFile.Path) Set objRng = objWord.ActiveDocument.Content ' ディレクトリ不要なら objFile.PathをobjFile.Nameに変更ください Wscript.Echo objFile.Path & "," & _ objRng.ComputeStatistics(wdStatisticCharacters) & "," & _ objRng.ComputeStatistics(wdStatisticWords) objWord.Documents.Close Set objDoc = Nothing Set objRng = Nothing End If Next Next objWord.Quit
●使い方
cscript wordinfo.vbs . aaaa >output.csv
wordinfo.vbsの後ろには、調べたいディレクトリを書きます(複数可)。
カレントなら「.」、相対なら「aaaa」のように、当然「C:\hproot」のように絶対パスもOKです。
最後に「>output.csv」のようにリダイレクトしてファイルに落としています。始めは、この「>output.csv」をつけなければ画面に表示されますので、その後でリダイレクトしてファイルに落とすのがいいかも知れません。
ありがとうございます。
柔軟に変更ができそうなコードで助かります。
ざっと試しましたが期待通りの結果になっています。
ほかの文字カウント情報も出せるようですし、
ちょっと手を加えれば別のファイル形式にもいけそうです。
大変助かりました。ありがとうございます。
というやり方は、きっと質問者の好みには合いそうもないな
ありがとうございます。
ご指摘の通り、確かに合いそうもないですね。
以下のソフトはどうでしょう。
JW - ファイルの行数、単語数、文字数を数えて、標準出力に出力
http://www.vector.co.jp/soft/dos/util/se000851.html
Text Analyzer
テキストの簡単な解析(文字数,行数,英単語数,原稿用紙枚数のカウント等)
ありがとうございます。
手軽にできそうなのはよかったんですが、
html ファイルですので、タグの情報などはカウントしたくありません。
ソースの状態ではなく、ブラウザ上(ワード上でも可)で表示される文字数/単語数が知りたかったのです。ご紹介いただいたソフトで実現可能かどうかちょっとわかりませんが、先によりよい回答をいただいていますのでそちらで対応しようと思います。
ありがとうございます。
柔軟に変更ができそうなコードで助かります。
ざっと試しましたが期待通りの結果になっています。
ほかの文字カウント情報も出せるようですし、
ちょっと手を加えれば別のファイル形式にもいけそうです。
大変助かりました。ありがとうございます。