AspClassico - Criar variaveis em tempo de execução
ASP: Nomes de Variáveis Dinâmicas
Vamos usar diferentes coisas em ASP: um array e as funções execute e eval. Ao mesmo tempo, vamos usar a função de divisão para criar o array.
Algumas Suposições
O exemplo a seguir parte de uma ideia precisa. Imagine que temos uma variável que contém valores diferentes. Esses valores são separados por ponto e vírgula. Algo como:
TheString = "01;02;03;04;05"
A variável acima está mudando dependendo, por exemplo, do conjunto de registros que recuperamos de uma tabela. Portanto, TheString não conterá os mesmos valores separados por ponto e vírgula. E nem mesmo o mesmo número de itens.
Precisamos criar um certo número de variáveis dependendo dos valores contidos em TheString e atribuir esses valores a diferentes variáveis. Em suma, precisamos obter algo como:
a1 = "01" a2 = "02" a3 = "03" a4 = "04" a5 = "05"
Não existe uma relação real entre cada variável: o fato de o nome da variável ser a1 não tem relação com o fato de o valor atribuído ser "01". Ao mesmo tempo, não sabemos de antemão o número de variáveis de que precisaremos, porque não sabemos o número de valores em TheString.
A Matriz
A primeira coisa que precisamos é criar o array. Para fazer isso, dividimos TheString considerando o ponto-e-vírgula como separador.
<% Dim TheArray Dim TheString TheString = "01;02;03;04;05" TheArray = split(TheString, ";") %>
Em seguida, precisamos atribuir os itens na matriz a variáveis dinâmicas. Lembre-se de que não sabemos quantos itens estão armazenados no array e, portanto, não sabemos quantas variáveis iremos criar.
Itens e Variáveis
Usamos um For ... Next para percorrer todos os itens da matriz. Ao mesmo tempo, para o propósito deste exemplo, estamos mostrando os valores dos itens com response.write:
<% Dim i i = 1 For each item in TheArray response.write "
Item Value: " & item ' A variável i é usada no próximo bit do código: ' vamos anexar o valor i a um "a" para os nomes das variáveis dinâmicas execute("a" & i & " = item") i = i + 1 Next %>
Como você pode ver, o valor de i aumenta cada vez que uma nova variável é criada. Quando o ciclo For ... Next termina, terminamos com i tendo um valor correspondente ao número de itens na matriz mais um. Precisamos nos lembrar disso na próxima etapa.
Observe que usamos a função execute para criar as variáveis.
Mostrando as Variáveis Dinâmicas
Como disse, não sabemos quantas variáveis criamos: depende do número de itens no array. De qualquer forma, podemos percorrer essas variáveis usando uma abordagem semelhante à anterior. O número de variáveis é i menos 1.
Em seguida, usamos j para um novo ciclo For ... Next:
<% i = i - 1 Dim j For j = 1 To i response.write "
a" & j & ": " & eval("a" & j) Next %>
O código completo irá gerar o seguinte resultado (dado TheString = "01;02;03;04;05"):
Item Value: 01
Item Value: 02
Item Value: 03
Item Value: 04
Item Value: 05
a1: 01
a2: 02
a3: 03
a4: 04
a5: 05
Abaixo o Código Completo, sem Comentários
<%
Dim TheArray, TheString, i, j
TheString = "01;02;03;04;05"
TheArray = split(TheString, ";")
i = 1
For each item in TheArray
response.write "
Item Value: " & item
execute("a" & i & " = item")
i = i + 1
Next
i = i - 1
For j = 1 To i
response.write "
a" & j & ": " & eval("a" & j)
Next
%>