質問: vbscriptの配列は、要素数を指定しないと使えないのでしょうか? 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を全て読み込まないと、ファイル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