2013-07-19 11 views
5

für das folgende Array als Beispiel löscht ...ein Element aus einem Array in klassischen ASP

arr(0)(0) = 3 
arr(0)(1) = name 
arr(0)(2) = address 
arr(1)(0) = 7 
arr(1)(1) = name 
arr(1)(2) = address 
arr(2)(0) = 14 
arr(2)(1) = name 
arr(2)(2) = address 

Ich brauche das mittlere Element (id = 7) aus dem Array zu löschen. Ich verstehe, dass ich das Array durchlaufen muss und jeden Datensatz, der nicht gelöscht werden soll, in ein neues Array verschiebe. Ich habe versucht, so ...

Dim newArr,i 
Redim newArr(Ubound(arr)) 

For i = 0 to Ubound(arr) 
    If (CStr(arr(i)(0)) <> 7) Then 
     newArr(i) = arr(i) 
    End if 
Next 

Wenn diese Debuggen kann ich die if-Anweisung Arbeit sehen, so weiß ich nur zwei Elemente kopiert werden, aber newArr ist am Ende dieses leer. Was vermisse ich. Ich bin ein PHP-Coder, der für die klassische Asp neu ist und ich habe Array-Funktionen, die diese Art von Dingen unnötig machen. Jede Hilfe wird geschätzt. Vielen Dank.

+0

Ich bin mir bewusst, scripting.dictionary, jedoch das Array in Frage ist über eine sehr große Website verwendet und ich habe keinen Zugriff, um es an dieser Stelle zu ändern. –

+1

Nicht wirklich eine Lösung, aber: das ist kein Asp-Problem. ASP ist nur ein Container für die Skriptsprache, in Ihrem Fall VBscript. Ihr Problem ist daher ein VBScript-Problem. Dieses Wissen kann Ihnen helfen, Google erfolgreicher zu suchen. – Jeff

Antwort

3

Sie haben keine neuen Array benötigen, Sie können die Elemente einfach neu zuweisen und das Array "beschneiden":

Const removalIndex = 1 
For x=removalIndex To UBound(arr)-1 
    arr(x) = arr(x + 1) 
Next 
ReDim Preserve arr(UBound(arr) - 1) 

Dieser Code entfernt das Array-Element an Index 1 aus dem Haupt-Array. Wenn Sie den Index des zu entfernenden Elements nicht im Voraus kennen, können Sie ihn leicht mit einer einfachen Schleife über das Array finden.

6

Anstatt Array zu verwenden, können Sie Scripting.Dictionary versuchen.

Es ist viel flexibler und hat unter anderem Remove Methode.

+0

Leider habe ich keinen Zugriff auf die Erstellung des Arrays. Es ist eine sehr große Site und das fragliche Array wird durchweg verwendet. An dieser Stelle ist es nicht möglich, davon wegzukommen. –

4

Ich empfehle, Scripting.Dictionary zu verwenden und es stattdessen als List/Auflistung zu verwenden, da es Einfügungen und Löschungen ermöglicht. Siehe hier: Lists in VBScript

0

Ich weiß nicht die definitive Antwort, aber wenn ich einen Stich in die Dunkelheit erraten würde, würde ich vorschlagen, dass, da das Array zweidimensional ist, man sich vielleicht explizit darauf beziehen muss ?

Dim newArr,i 
Redim newArr(Ubound(arr),3) 

For i = 0 to Ubound(arr) 
    If (CStr(arr(i)(0)) <> 7) Then 
     newArr(i)(0) = arr(i)(0) 
     newArr(i)(1) = arr(i)(1) 
     newArr(i)(2) = arr(i)(2) 
    End if 
Next 
0

Ich sehe einige VBScript Syntax Probleme. Erstens:

arr(0)(0) = 3 'ERROR: Subscript out of range 
arr(0, 0) = 3 'CORRECT 

Next:

ReDim newArr(Ubound(arr)) 'this is 1 dimensional array 
newArr(0) = arr(0)   'this will NOT work 
newArr(0) = arr(0, 0)  'this will work 

Und schließlich: warum Sie String konvertieren und dann vergleichen zu einem Integer mit:

(CStr(arr(i)(0)) <> 7) 
Verwandte Themen