2013-07-26 4 views
5

Ich habe einen Teil einer Webseite neu gestaltet, um die Aktualisierung in Zukunft zu erleichtern. Derzeit ist es eine Reihe von Tabellen, die fest codiert sind. Um die Tabelle neu zu gestalten (zum Beispiel, um sie wie gewünscht zu alphabetisieren), müssen Sie manuell viele Werte im HTML-Code austauschen.So implementieren Sie ein Array in VBScript mit einer Variablengröße

Dies ist, was ich tun möchte: Erstellen Sie ein URL_Link-Objekt mit einem Titel und Link-Variable, um den Anzeigenamen und die URL jeweils zu halten. Erstellen Sie ein Array von url_Link-Objekten, und füllen Sie es am Anfang der ASP-Datei für die Seite auf. Führen Sie eine für jede Schleife auf diesen Arrays zum Erstellen und Füllen der Tabelle

Dies ist nicht so schlimm, aber ich habe zwei Probleme. Zuerst möchte ich die Array-Größe nicht definieren müssen, da dies eine zweite Stelle darstellt, die geändert werden muss, wenn Änderungen an der Anzahl der Links vorgenommen werden. Es gibt eine Logik, die verhindert, dass bestimmte url_Link-Objekte angezeigt werden (z. B. können einige Benutzer nicht auf bestimmte Seiten zugreifen, so dass sie keine Links sehen), und dies würde Probleme bei der Dimensionierung der Arrays verursachen.

Ich weiß, dass ich nur die Arrays von einer großen Größe machen konnte, aber das scheint mir verschwenderisch (und ich weiß nicht, wie für jede Funktion und wollen nicht eine Reihe von leeren Zeilen angezeigt werden).

Was kann ich tun, um diese Probleme zu lösen? Ich bin in VBScript nicht sehr kenntnisreich, und der meiste Code, mit dem ich gearbeitet habe, nutzt Arrays oder Objekte nicht aus.

UPDATE: Ich habe versucht, mit einem redim PRESERVE das überschüssige Fett eines übergroßen Array zu trimmen. Das Problem ist, dass mein Array in einigen Fällen aufgrund von if-Bedingungen mit kleineren Mengen von Objekten gefüllt wird als seine maximale Größe. Dies verursacht später Probleme, wenn ich eine for-Schleife verwende (versuche, eine für jeden zu bekommen, die funktioniert und das ist im Moment nicht passiert). Ich erhalte die Fehlermeldung "Dieses Array fest oder vorübergehend gesperrt" auf der ReDim Linie

Code:

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 a (1)" erstellt ein festes (nicht ReDim-fähiges) Array mit 2 Elementen, indiziert 0 und 1. Verwenden Sie "Dim a: a = Array()" oder "ReDim a (-1)" zu Erstellen Sie ein leeres ReDim-fähiges Array. –

Antwort

5

Verwenden ReDim auf dem Array zu erhalten. Sie können UBound verwenden, um die aktuelle Anzahl der Elemente zu finden und etwas tun, wie

ReDim Preserve myArrayName (UBound(myArrayName) + 1) 

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

+1

Ich habe dies versucht, und ich bekomme einen Fehler Dieses Array ist behoben oder vorübergehend gesperrt. Code hinzugefügt über –

+3

Marshall: Stellen Sie sicher, dass Ihre Array-Klammern leer sind, wenn Sie die Array-Variable zunächst abblenden. Überprüfen Sie den Abschnitt Bemerkungen in dem Link, den ich gepostet habe, sie erwähnen es beiläufig, aber es ist irgendwie eine große Sache. Sie müssen es mit leeren Parens abdunkeln und dann sofort neu erstellen. –

3

die richtige Art und Weise zu zeigen, dynamische Arrays in VBScript zu verwenden und Matts Kommentar falsch zu beweisen:

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) 

Ausgabe:

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

Update-WRT Kommentar:

Sowohl die a und b die Art und Weise korrekt ist - Sie erhalten eine eindimensionale dynamische Array, den UBound() kann von Anfang an angewandt werden. Manche Leute mögen b bevorzugen, weil sie ReDim v ohne vorherige Dim v nicht mögen; Andere können das Gefühl haben, dass b unbeholfen oder fehlerträchtig ist.

Wenn Sie this problem about a two-dimensional array betrachten, können Sie zu der Schlussfolgerung kommen, dass der Weg besser skaliert.

+0

@ Styne666 - siehe Update. –