プロが教えるわが家の防犯対策術!

いつもお世話になっております。

WindowsXP環境にある下記のようなVBSがあります。


コード------------------------------------------------------------------

path = "a.txt"
Set FSO = WScript.CreateObject( "Scripting.FileSystemObject" )

'全行読み込み処理 (改行を1行単位として)
Set f = FSO.OpenTextFile( path )
Do Until f.AtEndOfStream
line = f.ReadLine()
i_line = f.Line - 1
Loop

WScript.Echo "全件数= " & i_line

'最終行-5読み込み処理
Set f = FSO.OpenTextFile( path )
For i=1 To i_line - 6
f.SkipLine
Next

LAST5 = f.ReadLine()

MOJI = Mid(LAST5,20,5)

WScript.Echo "文字 = " & MOJI

コード------------------------------------------------------------------


上記VBSの簡単な流れは・・・

(1)改行で1行とみなす a.txt を全行取得。
(2)全件数を表示
(3)最終行から5行前の行まで移動。
(4)(3)の行から20文字からの5文字を取得。
(5)5文字を表示。

とこんな感じです。
しかし、これだと改行有のファイルにのみ有効で
改行無には対応出来ません。
例えば120文字で1行とみなすファイルでも同様の
取得がしたいのです。

ご存知の方がいれば、ご教授願いませんでしょうか?

何卒、宜しくお願い致します。

A 回答 (2件)

> しかし、これだと改行有のファイルにのみ有効で


> 改行無には対応出来ません。
> 例えば120文字で1行とみなすファイルでも同様の
> 取得がしたいのです。

読み込んだ文字数が分かれば行数は計算で求められますよね。

この回答への補足

ご回答ありがとうございます。

>読み込んだ文字数が分かれば行数は計算で求められますよね。
ちなみに、
ファイルサイズ/120 で【120文字を1行とした件数】は出せるのでしょうか?

補足日時:2011/04/29 10:05
    • good
    • 0

方法が二つあります。


(1)Read(120)のように読み込むバイト数を指定する
(2)ADODB.Streamを使う

Dim Stream, Text
Set Stream = CreateObject("ADODB.Stream")
Stream.Open
Stream.Type = 2 'テキストモード
Stream.Charset = "shift_jis"
Stream.LoadFromFile path
Text = Stream.ReadText(120)

ADODBの方は文字コードの指定や変換が可能なこと、
Positionプロパティを使って任意の位置から読めること、
バイナリデータを扱えることなど応用範囲が広いため、
憶えておくと便利です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!