高校三年生の合唱祭で何を歌いましたか?

VBScript初心者です。

VBScriptで配列を扱った処理を作ろうとしています。

具体的には、ファイルAを読み取り、特定の条件に合うものだけをファイルBに書き込みます。
 a.ファイルAを1行ずつ読み込み、配列strに格納
 b.配列strの中から特定の条件に合うものをファイルBにwriteline
ファイルAは毎日行数が変動するファイルです。

困っているのは、配列strを宣言するときに要素数まで指定しないと使えない(ように見える)
ことです。調査不足かもしれませんが、ネット検索上はそう解釈できました。

この場合、上記処置をしようとすると、
1.ファイルAオープン
2.ファイルAの行数を取得
3.ファイルAクローズ
4.配列strを2で取得した行数を要素数として宣言
5.ファイルAオープン
6.上記a,bを実施
となり、ファイルAを2回オープンクローズすることになり、本当にこんなやり方しかないの?
と思ってしまいます。

ReDimという配列の再宣言という概念もあるようですが、再宣言前に格納したデータがすべて
消えてしまう動きに見え、使えそうもありません。
配列を適当に大きな要素数で定義すればできるといえばできますが、上述の通りファイルAは
日々行数が変動するファイルであり、想定を上回る行数になった場合に困るため、適正値の
判断がしにくいです。
それしか手がないならあきらめますが、当方が知らないだけで、ほかに良い方法があるのでは
と期待しております。

不勉強で恐縮ですが、ご教示お願いします。

A 回答 (3件)

redim preserveとすることで、以前の内容が保障されます。


以下のスクリプトを実行してみてください。
redimのサンプルです。
--------------------------------
Option Explicit
Dim stime()
redim preserve stime(0)
stime(0) = "2011/11/18 09:48:25"
redim preserve stime(1)
stime(1) = "2011/11/19 09:48:25"
redim preserve stime(2)
stime(2) = "2011/11/20 09:48:25"
dim st
for each st in stime
WScript.Echo st
next
--------------------------------------
    • good
    • 0
この回答へのお礼

できました。ありがとうございました!

お礼日時:2015/10/18 09:24

というか、


ファイルAを全て読み込まないと、ファイルBに書き出す行が判断できないのですか?
通常ですとファイルから一行ずつ読み取って、その行が書き出す行であれば書き出し、という処理になると思います。
書き出す行の判断に複数行が必要だとしても、変数をフラグに使用するなどすれば実現できると思います。

Set objFS = CreateObject("Scripting.FileSystemObject")
Set objInput = objFS.OpenTextFile("input.txt", 1, False)
Set objOutput = objFS.CreateTextFile("output.txt")

Do While ObjInput.AtEndOfStream <> True
rem 実際は条件に合う行のみ書き込み実施
objOutput.WriteLine(ObjInput.ReadLine)
Loop

objInput.close
objOutput.close
    • good
    • 0

なるほど, preserve なんてものがある, と.

    • good
    • 0

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


おすすめ情報