こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

[VBS] 動的配列について教えてください!

VBS初心者です。
以下のように、リストを読み込んで動的配列に持たせたいです。

-----------------------------------------------------------------

GET_FILE = "sample.txt"
SET objFs = CreateObject("Scripting.FileSystemObject")

' 動的配列セット
Call Array_Set("AryVal",GET_FILE)

' 表示
For i = 0 To Ubound(AryVal)
msgbox AryVal(i)
Next

' 終了
WScript.Quit 0

Function Array_Set(AryName,ReadFile)

Set strVal = objFs.OpenTextFile(ReadFile)

' 1行づつ処理
Do While strVal.AtEndOfStream <> True

i = i + 1

ReDim Preserve AryName( i - 1 )

AryName( i - 1 ) = strVal.ReadLine

Loop

End Function
-----------------------------------------------------------------

見て頂くと分かるとおり、動的配列として持たせたい変数名を
Functionの引数として渡しています。(当然のごとくエラー、、、)
Functionの引数として渡した値に動的配列が格納される方法があれば教えてください。
よろしくお願いします。

投稿日時 - 2014-08-26 16:27:36

QNo.8731249

困ってます

質問者が選んだベストアンサー

変数をパブリック宣言しておいて
名前ではなく変数そのものを渡してあげれば。


Public AryVal()

GET_FILE = wscript.scriptfullname '"sample.txt"

SET objFs = CreateObject("Scripting.FileSystemObject")

' 動的配列セット
Call Array_Set(AryVal,GET_FILE)

・・・以下は冒頭の質問と同じなので省略しました。

投稿日時 - 2014-08-27 08:46:16

お礼

Public AryVal()

完全に忘れてました、、、!!!
思い通りの処理を行うことが出来ましたぁ!
まぢありがとうございますうううううううううううう!!w

投稿日時 - 2014-08-27 12:56:49

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

あまり詳しくありませんが

Call Array_Set("AryVal",GET_FILE)

の第一引数は単なる文字列ですから、呼び出し側で配列を定義して、
その配列名を直接入れればいいと思いますが。

投稿日時 - 2014-08-26 16:39:05

お礼

Execute関数を利用すると、引数で渡した文字列に値が格納される事が出来ましたが
Callを抜けるとと、配列が空になってしまいます、、、。
初歩的な事かもしれませんが、引き続きご教示頂ければと思います。


-----------------------------------------------------------------

GET_FILE = "sample.txt"
SET objFs = CreateObject("Scripting.FileSystemObject")

' 動的配列セット
Call Array_Set("AryVal",GET_FILE)

' 表示
For i = 0 To Ubound(AryVal)
msgbox AryVal(i)
Next

' 終了
WScript.Quit 0

Function Array_Set(AryName,ReadFile)

' 動的配列宣言
Execute(" Dim " & AryName & "()" )

Set strVal = objFs.OpenTextFile(ReadFile)

' 1行づつ処理
Do While strVal.AtEndOfStream <> True

i = i + 1

Execute(" ReDim Preserve " & AryName & "(" & i - 1 & ")" )

Execute( AryName & "(" & i - 1 & ") = strVal.ReadLine " )

Loop

End Function
-----------------------------------------------------------------

投稿日時 - 2014-08-26 17:01:25

あなたにオススメの質問