出来るのだASP Q&A掲示板(過去LOG)  訪問数 52046 昨日 889 今日 776
    【PR】 パソコン入門からIT専門書まで幅広く取り揃えています。セブン-イレブン受取り手数料無料のセブンアンドワイ。
Topに戻る 掲示板に戻る 検索 削除 管理者

無題   あるるさん [2001/12/20 20:20:10] [1297]
  配列について   あるるさん [2001/12/20 20:21:31] [1298]
  良い子の掛け算   北岳さん [2001/12/21 9:51:30] [1299]
    Re:良い子の掛け算   北岳さん [2001/12/21 10:03:04] [1300]
      遅くなってすいません…   あるるさん [2001/12/24 4:37:10] [1308]
      使ってみました   あるるさん [2001/12/24 5:08:28] [1309]
        Redim Preserve   北岳さん [2001/12/25 9:26:41] [1312]
          メモリーリーク?   北岳さん [2001/12/27 13:35:27] [1322]

[1297] 無題
投稿者:あるるさん 2001/12/20 20:20:10
はじめまして、始めて1ヶ月足らずの初心者です。
いつも参考にさせてもらっています。
早速質問なのですが、配列の範囲についてです。

Dim Array(10) というふうに宣言したのですが、
配列の数(10)を宣言せずに、
つまり可変な配列数を宣言することは出来ないのでしょうか?
更に使っている配列以外は存在しないようにしたいのです。
用途によって配列数が変えたいのです。

簡単な質問ですが、よろしくお願いします。

[1298] 配列について
投稿者:あるるさん 2001/12/20 20:21:31
題名が消えてしまいました。。。
すいません。。。

[1299] 良い子の掛け算
投稿者:北岳さん 2001/12/21 9:51:30
配列の動的宣言は、dim A()、redim A(m,n)の組み合わせです。
削除は Erase A です。
 
下の例で、r=9,c=9 なら普通の九九ですが、
これからの良い子は、できれば九十九十の表を暗記しましょう。
 
====================================
<html><body>
<SPAN STYLE="color:red; font-size:20pt; width:70%; filter:Shadow()">
良い子の掛け算
</SPAN>
<%
Dim A() '配列の動的宣言
r=90
c=90
Redim A(r,c) '動的配列変数割当
for i=1 to r
for j=1 to c
A(i,j)=i*j
next
next
%>
<table border=1>
<tr bgcolor="yellow"><td>&nbsp;</td><%
for j=1 to c
%><td><%= j %></td><%
next
%></tr>
<% for i=1 to r %>
<tr><td bgcolor="yellow"><%= i %></td>
<% for j=1 to c %>
<td bgcolor="#e0ffff"><%= A(i,j) %></td>
<% next %></tr>
<% next
erase A '配列削除、メモリ開放
%>
</table></body></html>

[1300] Re:良い子の掛け算
投稿者:北岳さん 2001/12/21 10:03:04
ソースが1行おきになってしまったので、
 
<td bgcolor="#e0ffff"><%= A(i,j) %></td>
<% next %></tr>
 
を、<% の位置だけ変えて、
 
<td bgcolor="#e0ffff"><%= A(i,j) %></td><%
next %></tr>
 
に訂正願います。
画面は変化ないですが、ソースの空白行が消えます。

[1308] 遅くなってすいません…
投稿者:あるるさん 2001/12/24 4:37:10
お礼が遅くなって申し訳ございません。。。

開放という手があるんですか。
非常に勉強になりました。
早速使わせて頂きます。

これからも宜しくお願いします。

[1309] 使ってみました
投稿者:あるるさん 2001/12/24 5:08:28
が、メモリ開放するとすべて消えてしまってました…
どうやら、説明不足でした。

配列を例えば10個使ったとして、
それは維持しておいて、他の何も入っていない配列は削除する、
そう言いたかったのです。

しかし上の方法を参考にして少し変えてみれば、
(配列に値を入れる際に変数を増やしていき、
それを配列の範囲にする)
開放を使わずに配列を消す事が出来ました。

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

[1312] Redim Preserve
投稿者:北岳さん 2001/12/25 9:26:41
> 配列を例えば10個使ったとして、
> それは維持しておいて、他の何も入っていない配列は削除する、
> そう言いたかったのです。
 
これには Redim Preserve が使えます。
以下をお試し下さい。
-----------------------------
<html><body>
<p>初期設定(要素数=58)
<%
dim x()
redim x(58)
for i=1 to 58
x(i)=chr(64+i)
next
'--表示
for i=1 to 58
%><br>(<%= i %>) <%= x(i) %><%
next
%><p>再設定(要素数=26 に縮減)</p><%
redim preserve x(26)
'--再表示
for i=1 to 26
%><br>(<%= i %>) <%= x(i) %><%
next
%><p> Redim Preserve の結果、
<br>27番目以降はどうなった?</p><%
redim preserve x(58)
'--再々表示
for i=1 to 58
%><br>(<%= i %>) <%= x(i) %><%
next
%>
<p>Redim Preserve により、縮減された範囲のメモリが節約できます。
<br>当然、再拡張しても復活しません。</p>
</body></html>

[1322] メモリーリーク?
投稿者:北岳さん 2001/12/27 13:35:27
念のため追記しておきます。
動的配列を Redim、Redim Preserve で運用した場合、各ASPの最後で明示的に配列を
Erase 配列名
で削除しておくほうが無難と思います。
VBScript で起きるかどうか知りませんが、もともと VB の兄弟なので、
VB で有名なメモリーリークが起きるかもしれません。
(確認していませんが、むしろ必ず起きる気がします。)
 
メモリーリーク:
確保した配列領域内だけでやりくりしないで、どんどん新しい領域をメモリー内に確保して行き、実行終了まで手離さない現象。
これが起きたらサーバの実行(応答)速度が落ちてくるはずです。
 
(なお昔VBで exeが終わった後でもメモリーが確保されたままだったような気がしましたが、これは気のせいかも。)



TreeBBS For ASP V.0.1.3
Program By YasNet