ASP: Creare array dinamici in ASP

Sebbene l’ASP non consenta nativamente l’utilizzo di array dinamici, con un po’ di trucchetti e di fantasia si reisce a creare una struttra analoga.

L’esempio che segue è allo stato embrionale ma in ogni caso funzionante ed utilizzabile.

La prima cosa da fare è definire una classe che chiameremo (con ovvio abuso di fantasia) arrayDinamico.

class arrayDinamico 
	public vector()
	private appArray()
	public lastIndex 
end class


In questa classe abbiamo definito 3 membri:
un array publico vector, un array privato appArray e una variabile lastIndex pubblica.

Ora possiamo aggiungere alla classe il costruttore:

class arrayDinamico 
	public vector()
	private appArray()
	public lastIndex 

        Private Sub Class_Initialize
    	     lastIndex = -1
   	End Sub
end class

In pratica il costruttore non fa altro che porre a -1 lastIndex quando creiamo un’istanza della classe stessa.

Possiamo a questo punto aggiungere il metodo push() che aggiunge il valore passato in coda all’array.

class arrayDinamico 
	public vector()
	private appArray()
	public lastIndex 

        Private Sub Class_Initialize
    	     lastIndex = -1
   	End Sub

	public sub push(pValue)
		if lastIndex>-1 then
			redim appArray(lastIndex)
			
			for i=0 to lastIndex
				appArray(i) = vector(i)
			next
		end if	
		lastIndex = lastIndex + 1
		redim vector(lastIndex)
		
		for i=0 to lastIndex-1
			 vector(i) = appArray(i)
		next
		
		vector(lastIndex) = pValue
	end sub	

end class

Dobbiamo analizzare il metodo push appena inserito:

public sub push(pValue)
		if lastIndex>-1 then
			redim appArray(lastIndex)
			for i=0 to lastIndex
				appArray(i) = vector(i)
			next
		end if	
		lastIndex = lastIndex + 1
		redim vector(lastIndex)
		
		for i=0 to lastIndex-1
			 vector(i) = appArray(i)
		next
		
		vector(lastIndex) = pValue
	end sub

Tutto questo codice è dovuto al fatto che l’utilizzo di redim cancella il contenuto dell’array, quindi dobbiamo come prima cosa trasferire il contenuto dell’attuale array vector in appArray, ma effettuiamo tale operazione solo se non l’array vector contiene almeno un elemento (linee da 2 a 7).
Poi ridimensioniamo vector tramite redim, ricopiamo quello che c’era nell’arrai prima del redim, e infine aggiungiamo l’ultimo valore.

Ora possiamo aggiungere un metodo print(),all’interno della classe, la cui funzione è quella di stampare a video il contenuto dell’array dinamico.

public sub print()
	for i=0 to ubound(vector)
		response.Write(vector(i)&"
") next end sub

Ottenendo così la seguente classe:

class arrayDinamico 
	public vector()
	private appArray()
	public lastIndex 
	
	Private Sub Class_Initialize
    	lastIndex = -1
   	End Sub
	
	public sub push(pValue)
		if lastIndex>-1 then
			redim appArray(lastIndex)
			
			for i=0 to lastIndex
				appArray(i) = vector(i)
			next
		end if	
		lastIndex = lastIndex + 1
		redim vector(lastIndex)
		
		for i=0 to lastIndex-1
			 vector(i) = appArray(i)
		next
		
		vector(lastIndex) = pValue
	end sub	
	
	public sub print()
		for i=0 to ubound(vector)
			response.Write(vector(i)&"
") next end sub end class

Per instanziare il codice dobbiamo scrivere

set aDina = new arrayDinamico

A questo punto possiamo utilizzare il metodo push() per aggiungere elementi e il metodo print() per visualizzare l’array.

aDina.push("Ciao")
aDina.print
aDina.push("Sono un array dinamico")
aDina.print
aDina.push("Molto Diamico")
aDina.print

Il codice completo si può scaricare seguendo questo link