2013-07-26 54 views
5

我正在重新設計網頁的一部分,以便將來更容易更新。目前,它是一系列硬編碼的表格。要重新設計表格(例如,按照我想要的字母順序),需要手動交換html中的很多值。如何以可變大小在vbscript中實現數組

這就是我想要做的: 用標題和鏈接變量創建一個url_Link對象,分別保存顯示名稱和url。 創建一個url_Link對象數組,並將其填充到該頁面的.asp文件頂部。 對這些陣列上的每個迴路執行一次構建和填充表格

這本身並不是很糟糕,但我遇到了兩個問題。 首先,我不想定義數組的大小,因爲這使得第二個地方必須在鏈接數量發生變化時進行更改。 將會有一些邏輯來阻止顯示某些url_Link對象(例如,某些用戶無法訪問某些頁面,因此他們將看不到鏈接),這會在調整數組大小時導致問題。我知道我可以製作一個大尺寸的數組,但這對我來說似乎很浪費(我不知道每個函數如何,也不希望大量的空行顯示出來)。

我能做些什麼來解決這些問題?我對vbscript不是很瞭解,並且大多數我一直在使用的代碼沒有利用數組或對象。

更新: 我已經嘗試使用redim PRESERVE修剪超大型陣列的多餘脂肪。問題在於,在某些情況下,由於條件限制,我的數組所填充的對象數量比最大數量少。這在稍後使用for循環時會導致問題(試圖讓每個人都工作,而此時不會發生這種情況)。我得到的錯誤「這個數組被固定或臨時鎖定」在REDIM線

代碼:

dim systemSettingsArray(1) 
    arrayCounter = 0 
    if ADMIN = "Y" then 
     set systemSettingsArray(arrayCounter) = (new url_Link).Init("Account Administration","Maintenance/Account_Admin.asp") 
     arrayCounter = arrayCounter + 1 
    end if 
    set systemSettingsArray(arrayCounter) = (new url_Link).Init("Time Approval","Maintenance/system_Time_Approval.asp") 
    redim Preserve systemSettingsArray(arrayCounter) 
+2

「DIM一個(1)」 創建了一個固定的(非使用ReDim-能)陣列2個元素索引0和1,使用 「DIM一個:A =陣列()」 或 「一個REDIM(-1)」,以創建一個空的ReDim-able數組。 –

回答

5

使用REDIM陣列上保存。您可以使用UBound函數找到當前的元素數量和這樣做

ReDim Preserve myArrayName (UBound(myArrayName) + 1) 

http://msdn.microsoft.com/en-us/library/c850dt17%28v=vs.84%29.aspx

+1

我試過了,我得到一個錯誤這個數組是固定的或暫時鎖定的。代碼添加上述 –

+3

馬歇爾:請確保您的數組括號是空的,當你開始暗淡數組變量。檢查我發佈的鏈接中的評論部分,他們隨便提到它,但它是一個很大的交易。你需要用空的parens調暗它,然後立即將它變紅。 –

3

要顯示在VBScript中使用動態數組的正確方法,並證明馬特的評論錯:

Option Explicit 

ReDim a(-1) 
Dim b : b = Array() 
Dim c() 
Dim i 
For i = 0 To 1 
    ReDim Preserve a(UBound(a) + 1) : a(UBound(a)) = i 
    ReDim Preserve b(UBound(b) + 1) : b(UBound(b)) = i 
    On Error Resume Next 
    ReDim Preserve c(UBound(c) + 1) : c(UBound(c)) = i 
    WScript.Echo Err.Description, "- caused by Dim c()" 
    On Error GoTo 0 
Next 
WScript.Echo "a:", Join(a) 
WScript.Echo "b:", Join(b) 

輸出:

Subscript out of range - caused by Dim c() 
Subscript out of range - caused by Dim c() 
a: 0 1 
b: 0 1 

更新WRT評論:

將A與B的方式是正確的 - 你到哪個UBound函數()可以從一開始就採用的一個維動態數組。有些人可能更喜歡b,因爲他們不喜歡ReDim v沒有以前的Dim v;其他人可能會覺得b很笨拙或錯誤。

如果你看this problem about a two-dimensional array,你可能會得出結論,即一種方式更好。

+0

@ Styne666 - 請參閱更新。 –