• 締切済み

ASPにおいてのRedim

ASPにおいて配列数を再定義するRedimはつかえないようですが、これにかわる方法はないのでしょうか?? 宣言する際に固定で配列数を決めておくほかにないのでしょうか?? よろしくおねがいします!!!!

みんなの回答

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.1

はあ? ちゃんと使えるはずですよ? VBScript の変数 http://www.microsoft.com/japan/msdn/library/ja/script56/html/vbsvariables.asp どういったソースを書いてるんですか? #いきなりReDimと書いてもダメですよ。↓ #Ex: # Dim a() as Integer ' まずは宣言 # ReDim a(9) ' サイズ確定

関連するQ&A

  • ASPのReDim Preserveについて

    いつもお世話になります。 ASP(VBScript)で教えて頂きたいことがあります。 VBScriptにはJavaでいうArrayListのようなコレクション機能がないので、動的配列を実現するためには ReDim PreserveやScripting.Dictionaryを使用しなければなりませんよね。 そこで、DBから取得したレコードを、ループする度毎にReDim Preserveを使用し、データをセットするよう な実装をしていました。すると、ReDim Preserveは問題があるのでやめた方がよい、と言われました。 具体的には、ReDim Preserveをすることによって、新たに配列を作成し、古い内容をコピーするため、 倍々にメモリを食いつぶしていくことになり、それが大きくなるとどんどん遅くなっていき、そしてメモリリーク になる、ということでした。 自分なりに調べてみたのですが、そのような記事を見つけることができませんでしたし、JavaのArrayList でも内部的には配列を持っており、配列の再作成などをやっています。 ○○百万件などといった大量件数を扱う際は、それはメモリリークにならないような設計、実装をしなければ ならないとは思うのですが、それはどの言語でも共通で言えることであって、特別にVBScriptではやめた方がよい、 とは思えません。 ReDim Preserveを使用しても、先に述べたような認識をもっていれば問題ないと思うのですが、どうでしょうか。 VBScriptは、こういう仕組みだから駄目なんだ、という理由があるのでしょうか。もしあれば、根拠となる サイトなど教えて頂けると嬉しいのですが。。。 宜しくお願い致します。

  • dimを使わずにredimを使う場合

    VBAを使っていて、 配列数を変数で定義したいのですが、 ネットで検索すると Dim aaaa() as integer Redim aaa(xxx, yyy) あるいは Dim aaaa() Redim aaa(xxx, yyy) as integer のようにdimで変数を定義した後にredimで定義しなおす方法が書かれてあります。 一方で、 Redim aaa(xxx, yyy) as integer のように、dimの定義を省略して、いきなりredimで配列を定義しても 問題なくプログラムは実行できることに気がついたのですが これら二つの方法に違いはあるのでしょうか? 後者を使っても問題ないでしょうか?

  • ReDim Preserveできなかった配列をUBOUND……

    VBScriptでプログラムを組んでおります。 初心者なので言葉の使い方が間違っているかもしれませんがご容赦ください。 ASPでDBにアクセスして、このときにReDim Preserveを使って配列(str)を動的に拡張しながらDBから項目を抽出しています。 この動的に作った配列の項目を表示する際にどうしても項目数が必要なので UBound(str)で要素数を抜き出して使用しています。 DBにデータがあれば問題ないのですが、DBにデータがない場合はUBound(str)実行時に -------------------------- Microsoft VBScript 実行時エラー (0x800A0009) インデックスが有効範囲にありません。: 'ubound' -------------------------- と表示されてしまいます。 これを回避するにはDBから1つの項目を抽出する度に+1するような変数を作れば事足りるとは思いますが、 そうすると配列内の項目を表示する関数の引数を増やすことになり、少し納得がいきません。 Dim str() において Redim str(1)をしたかしてないかを見分ける方法を教えてくださいませんか。 ……無ければ「無い」と仰ってくれれば助かります。 では失礼します。 お時間があればご協力宜しくお願いします。

  • Redimについて

    redimで宣言した変数に文字列を格納してshll関数でほかのexeに変数を渡してその文字列を使いたいのですが中身が見れません。どうしたら見れるでしょうか?

  • ReDim PreserveよりもReDimが遅い

    こんにちは、配列がいくつまで取得できるのか計算するマクロを作っている時に変なことに気が付きました。 エクセルでフォームとラベルを1つ用意し、下記のようなプログラムをモジュールに書きます。 実行すると、10万ずつ数字が増えていき、数字が1000~2000万超えたあたりで、メモリ不足ですという 表示がでます。 ここで、ReDim PreserveのPreserveをとって、ReDimだけにすると、数字の増え方が目に見えて遅くなります。 ReDim Preserveとしたときは9.5秒ぐらいですが ReDim の時は 30秒以上かかっています 3台のマシンでテストしましたが、どれも似たような結果になりました 普通に値を保持するredim Preserveの方が遅いと思うのですがなぜこのような結果になるのでしょうか? ご教授お願いいたします。 Public Sub 配列上限取得計算() On Error GoTo ErrEnd Dim i As Long Const kankaku As Long = 100000 ReDim ans(1 To kankaku) As String ans(1) = 1 i = 2 UserForm1.Show vbModeless Do If i Mod kankaku = 0 Then DoEvents UserForm1.Label1 = i 'ここのPreserveをなくすと明らかに遅くなる ReDim Preserve ans(1 To i + kankaku) As String End If ans(i) = i i = i + 1 Loop Erase ans Unload UserForm1 Exit Sub ErrEnd: MsgBox "これ以上の配列を設定できません。" & vbCrLf & "上限は" & i & "です。" & vbCrLf & Err.Description Erase ans Unload UserForm1 End Sub

  • [Fortran]VBでいうRedim Preserve

    元ネタ。 http://oshiete1.goo.ne.jp/qa4104356.html http://oshiete1.goo.ne.jp/qa4114624.html コンパイラ: G95 ソースファイル: http://cid-b89cb784f5346675.skydrive.live.com/self.aspx/TestCase/Q4114624/Q4114624-1.f95 ある程度Q4104356 #1を移植するつもりで書きました。 実際このソースコードをコンパイルし,6以上の偶数を二つの素数の和で出力できているのですが, VB6でいうReDim Preserveに相当するものをやろうとして ループ回数に応じて配列を広げるために allocateした配列をもう一度allocateしなおそうとするとエラーが出ます。そのため,無理やり要素数100000と固定した整数配列と,現在格納されている個数を持ち、使いまわすことで実装しています。 ReDim Preserve相当句 or std::vector<T>同等機能 or 変数のスコープをもっと狭くもてる実装方法 等、教えていただきたいと思ってます。 ========= 効率が悪いのは解ってますが,頭の中に入れて組み立てなおすのが面倒くさいのでAsanoNagiさんのアルゴリズムを使っていません。

  • ReDimを使用した二次元配列

    全レコードが不明のファイルから、レコードを読み込んで分割し二次元配列に格納したいのですが、項目(列)数は確定しています。この場合は、どうすればレコード(行)数を動的に変更していく事が出来るのでしょうか? ヘルプを見ても、ReDim x(行, 列)だったら、列しか変更出来ないように書いてあって困っています。 どなたか、御教授をお願いします。

  • Redim とEraseの違いは?

    VBA フォームのボタン クリックイベント時に書き込んだ記述で、次のような記述があります。 Dim temp() as string ReDim temp(0) (next processing) 一度、イベントを処理した後(フォームは閉じません。) 再度ボタンをクリックして同じコードを実行すると前に行ったデータが消去されずに残っているようです。 ReDimで Preserve宣言を使っていないので内容が消去されると考えていました。 ReDimのまえに、 Erase temp という処理を設けて対応しますが、 ローカルウィンドウやウオッチウィンドウでメモリがクリアされたか確認できていません。 ReDimとEraseの処理でどのような違いがあるのでしょうか? どなたかよろしくお願いします。

  • Redimした動的配列はEraseする必要があるのか

    Visual Basic6(SP5)で開発を行っているものです。 時々、「メモリが"Read"になることができませんでした」と言うエラーメッセージと共にVisual Basicのアプリケーションが終了する不具合が発生します。メモリ操作関連のエラーだろうと社内で指摘されました。 怪しいかと思われるのは、ある動的配列をRedimし、解放する必要が無いのでEraseしていない点です。 動的配列は、RedimしたらEraseしないとエラーの元になり得るのでしょうか? 時間のある方、ご回答願います。

  • ActiveXDLL関数の引数ByRefで配列での呼び出し

    急を要しています。m(__)mなんでもいのでアドバイス、回答お願いいたします。 例えばActiveXDLL関数 Sub func2(ByRef P1()) ReDim P1(1) P1(1) = 2 P1(0) = 1 End Sub のような場合、 redim sData(1)’要素数定義 i = objSS.func2(sData(0)) で使えませんか?(配列は要素の数をASPで定義しておかないとだめなんですよね?) あと、ユーザー定義のコレクション型 Sub func3(ByRef P1() As VBAFix.Collection) ReDim P1(1) As VBAFix.Collection P1(1).Add "1", "1" P1(0).Add "2", "1" End Sub のような場合、 redim col(1) Set col(1) = CreateObject("VBAFix.Collection") set objSS = createObject("prjTest.clsTest") i = objSS.func3(col(0)) このようにしてつかえませんか?

専門家に質問してみよう