Foros del Web » Creando para Internet » Flash y Actionscript »

Nombres de variables creados dinámicamente.

Estas en el tema de Nombres de variables creados dinámicamente. en el foro de Flash y Actionscript en Foros del Web. Pues mi pregunta es la siguiente: ¿Se pueden crear nombres de variables dinámicamente? Lo que quiero conseguir es algo parecido a esto (sé que esto ...
  #1 (permalink)  
Antiguo 26/08/2005, 19:19
Avatar de [SiNeRGiA]  
Fecha de Ingreso: julio-2005
Ubicación: Fuengirola - Málaga
Mensajes: 21
Antigüedad: 19 años, 3 meses
Puntos: 0
Nombres de variables creados dinámicamente.

Pues mi pregunta es la siguiente:

¿Se pueden crear nombres de variables dinámicamente?

Lo que quiero conseguir es algo parecido a esto (sé que esto NO se puede hacer, pero con ello se explica perfectamente lo que quiero conseguir... desde hace ya varios días ):
Código:
for (z=0; z<20; z++){
  var "REG_"+z = z;
}
Ya sé que le acabo de pegar una "patá en tol kulo" al diccionario de ActionScript, pero es que no sé como explicarme ya y seguramente cuando vea la forma de hacerlo correctamente, me daré de cabezazos contra la pared.

En realidad, la necesidad de hacer esto viene de una clase constructora que cargo desde un fichero externo (.as), la cual me obliga a establecer una serie de variables como la que sigue:
Código:
var REG_1:lectura = new lectura ("Ana", "Ortiz", "Cliente");
var REG_2:lectura = new lectura ("Angel", "Rivas", "Cliente");
var REG_3:lectura = new lectura ("Amedio", "Remedios", "Visitante");
var REG_4:lectura = new lectura ("Antonio", "Ruiz", "Cliente");
...
var REG_20:lectura = new lectura ("Antonio", "Zamora", "Visitante");
Si escribo a mano todas las "lecturas" y las asigno a cada uno de los REG_x (x siempre será un número secuencial), funciona. Pero si intento mecanizar esta operación... recooOOoños que no hay manera de que funcione. ¡Po' Dio poo Diiiiiiioo! ¿Alguien sabe cómo remilgos se hace esto?


Graciaaaaaaaaaas!
__________________
El mejor recurso para dejar entrar el Conocimiento, es no defenderse de él... no defenderse del dolor que produce su profundo almacenamiento. :aplauso: ¡Cojones! A veces me arrepiento de querer saber tanto.

Última edición por [SiNeRGiA]; 26/08/2005 a las 20:45
  #2 (permalink)  
Antiguo 26/08/2005, 20:52
 
Fecha de Ingreso: noviembre-2002
Ubicación: LIMA
Mensajes: 652
Antigüedad: 22 años
Puntos: 1
bueno...para eso se inventaron los Arrays.Segun tu ejemplo del for:

var REG=new Array();
for (z=0; z<20; z++){
REG[] = 2*z;
}
// en este ejemplo REG[3]=6;
  #3 (permalink)  
Antiguo 26/08/2005, 22:29
Avatar de [SiNeRGiA]  
Fecha de Ingreso: julio-2005
Ubicación: Fuengirola - Málaga
Mensajes: 21
Antigüedad: 19 años, 3 meses
Puntos: 0
Nops! Eso no me sirve, aunque agradezco tu ayuda. Tendría quizá que incluir un poco más de información para poder comprender por qué no funciona.

Veamos. Esto es la clase constructora que tendrías que incluir en un fichero para Flash MX 2004 (supongo que ya sabes como hacerlo, sino, dime y te lo explico):

Código:
class TRAYECTORIA {
/*
	Declaración de variables
*/
	var ID:Number;
	var NAVIERA:String;
	var PAÍS_ORIGEN:String;
	var CIUDAD_ORIGEN:String;
	var PAÍS_DESTINO:String;
	var CIUDAD_DESTINO:String;
/*
	MÉTODOS
	Definición de las funciones que usa el prototipo
	Para cargar datos
*/
	function TRAYECTORIA (ID:Number, NAVIERA:String, PAÍS_ORIGEN:String, CIUDAD_ORIGEN:String, PAÍS_DESTINO:String, CIUDAD_DESTINO:String) {
		setID(ID);
		setNAVIERA(NAVIERA);
		setPAÍS_ORIGEN(PAÍS_ORIGEN);
		setCIUDAD_ORIGEN(CIUDAD_ORIGEN);
		setPAÍS_DESTINO(PAÍS_DESTINO);
		setCIUDAD_DESTINO(CIUDAD_DESTINO);
	}
/*
	Para chequear datos
*/
	function check_TRAYECTORIA ():String  {
		return ( getID(ID) +"," +
					 getNAVIERA(NAVIERA) + "," +
					 getPAÍS_ORIGEN(PAÍS_ORIGEN) + "," +
					 getCIUDAD_ORIGEN(CIUDAD_ORIGEN) + "," +
					 getPAÍS_DESTINO(PAÍS_DESTINO) + "," +
						 getCIUDAD_DESTINO(CIUDAD_DESTINO) );
	}
/*
	Para mostrar datos
*/
	function show_TRAYECTORIA ():String  {
		return ("\nID: "             + getID(ID) +
				"\nNAVIERA: "        + getNAVIERA(NAVIERA) +
				"\nPAÍS_ORIGEN: "    + getPAÍS_ORIGEN(PAÍS_ORIGEN) +
				"\nCIUDAD_ORIGEN: "  + getCIUDAD_ORIGEN(CIUDAD_ORIGEN) +
				"\nPAÍS_DESTINO: "   + getPAÍS_DESTINO(PAÍS_DESTINO) +
				"\nCIUDAD_DESTINO: " + getCIUDAD_DESTINO(CIUDAD_DESTINO) );
	}
/*
	MÉTODOS set*
	
*/
	public function setID(ID:Number):Void {
		this.ID = ID;
	}
	public function setNAVIERA(NAVIERA:String):Void {
		this.NAVIERA = NAVIERA;
	}
	public function setPAÍS_ORIGEN(PAÍS_ORIGEN:String):Void {
		this.PAÍS_ORIGEN = PAÍS_ORIGEN;
	}
	public function setCIUDAD_ORIGEN(CIUDAD_ORIGEN:String):Void {
		this.CIUDAD_ORIGEN = CIUDAD_ORIGEN;
	}
	public function setPAÍS_DESTINO(PAÍS_DESTINO:String):Void {
		this.PAÍS_DESTINO = PAÍS_DESTINO;
	}
	public function setCIUDAD_DESTINO(CIUDAD_DESTINO:String):Void {
		this.CIUDAD_DESTINO = CIUDAD_DESTINO;
	}
/*
	MÉTODOS get*
*/
	public function getID():Number {
		return ID;
	}
	public function getNAVIERA():String {
		return NAVIERA;
	}
	public function getPAÍS_ORIGEN():String {
		return PAÍS_ORIGEN;
	}
	public function getCIUDAD_ORIGEN():String {
		return CIUDAD_ORIGEN;
	}
	public function getPAÍS_DESTINO():String {
		return PAÍS_DESTINO;
	}
	public function getCIUDAD_DESTINO():String {
		return CIUDAD_DESTINO;
	}
}
Bien. Debes guardar este código dentro de un fichero que debes llamar TRAYECTORIA.as (esto es obligatorio) y, en ese mismo directorio, creas un archivo FLA para trabajar en él (da igual el nombre). En el fotograma 1, insertas esta acción:

Código:
var T_1:TRAYECTORIA = new TRAYECTORIA (0,
				"< seleccione una compañía naviera >",
				"< seleccione un país >",
				"< seleccione un puerto >",
				"< seleccione un país >",
				"< seleccione un puerto >");
T_1.show_TRAYECTORIA();
Observa que defino así var T_1. Bien, pues lo que yo necesito ahora para crear diferentes RUTAS, sería un for o crear algo así como lo que expliqué en el mensaje anterior. Es decir, SUSTITUIR LAS DEFINICIONES ESCRITAS A MANO COMO T_1 por un bucle que asigne un nombre a estas variables, pero de manera dinámica, creando cada T_n...

¿Por qué? Porque al principio, creé unas pocas trayectorias a mano para probar un poco. Como funcionó, seguí desarrollando y ahora necesito capturar 650 trayectorias que proceden de una Base de Datos que cargo mediante un fichero que uso de puente, en formato XML. Cada nodo de este archivo XML se debe incrustar como una trayectoria desde la T_1 hasta T_TOTAL_TRAYECTORIAS.

En cualquier caso, lo que no puedo es cambiar que T_1, T_2, T_3... T_n son las trayectorias existentes que poseo y que deben llamarse precisamente así, CON ESTE FORMATO T_n (n es un número secuencial) porque ya he utilizado esto en la mayor parte del código que tengo. Si puedo evitar cambiarlo, mejor, porque es mucho cambio.
[B]

NOTA: No puedo usar la propia BASE DE DATOS para cargar datos desde ella, porque el colega para el que hago la web no puede usarla. Sería más fácil, pero ha de hacerse por "güebos" mediante un XML que tiene esta estructura:

Código:
<_TRAYECTORIA>
<NAVIERA>Brittany Ferries</NAVIERA>
<PAÍS_ORIGEN>España</PAÍS_ORIGEN>
<CIUDAD_ORIGEN>Santander</CIUDAD_ORIGEN>
<PAÍS_DESTINO>Gran Bretaña</PAÍS_DESTINO>
<CIUDAD_DESTINO>Portsmouth</CIUDAD_DESTINO>
</_TRAYECTORIA>
<_TRAYECTORIA>
<NAVIERA>Brittany Ferries</NAVIERA>
<PAÍS_ORIGEN>España</PAÍS_ORIGEN>
<CIUDAD_ORIGEN>Santander</CIUDAD_ORIGEN>
<PAÍS_DESTINO>Gran Bretaña</PAÍS_DESTINO>
<CIUDAD_DESTINO>Plymouth</CIUDAD_DESTINO>
</_TRAYECTORIA>
etc...
__________________
El mejor recurso para dejar entrar el Conocimiento, es no defenderse de él... no defenderse del dolor que produce su profundo almacenamiento. :aplauso: ¡Cojones! A veces me arrepiento de querer saber tanto.

Última edición por [SiNeRGiA]; 26/08/2005 a las 23:05
  #4 (permalink)  
Antiguo 27/08/2005, 10:59
 
Fecha de Ingreso: noviembre-2002
Ubicación: LIMA
Mensajes: 652
Antigüedad: 22 años
Puntos: 1
bueno...si entendi bien, entonces fue un error de programacion hacer tu codigo con los T_n en vez de arrays. En tu lugar haria el cambio y listo. Ahora, si tu codigo tiene tantos T_algo metido por ahi q se hace tedioso el cambio, tal vez deberias hacerte una pequeña rutina (en el lenguaje q mas gustes), q tome un string (tus lineas de codigo), haga un scaneo de todo el codigo y vaya sustituyendo los T_algo por T[algo]
Realmente no me queda muy claro si este es tu problema...suerte!.
  #5 (permalink)  
Antiguo 27/08/2005, 13:41
Avatar de [SiNeRGiA]  
Fecha de Ingreso: julio-2005
Ubicación: Fuengirola - Málaga
Mensajes: 21
Antigüedad: 19 años, 3 meses
Puntos: 0
Pues después de mucho darle vueltas, creo que efectivamente tendré que fastidiarme un poquito más y cambiar todo el código, Macro32. Y aquí, me surje un pequeño problema:


¿Cómo puedo crear un array que almacene todas las trayectorias que, en sí, son objetos de su clase constructora?


Se trata de que al utilizar ese array pueda hacer esto... (no sé si estaré volviendo a sacudir patadas al diccionario, pero quisiera fuera algo así)


trace ( ALL_TRAYECTORIAS[z].getNAVIERA() );


...y tendría que darme la NAVIERA de la trayectoria número "z".
__________________
El mejor recurso para dejar entrar el Conocimiento, es no defenderse de él... no defenderse del dolor que produce su profundo almacenamiento. :aplauso: ¡Cojones! A veces me arrepiento de querer saber tanto.
  #6 (permalink)  
Antiguo 27/08/2005, 15:27
Avatar de dexter_x740  
Fecha de Ingreso: julio-2003
Ubicación: cd. obregon, Sonora
Mensajes: 246
Antigüedad: 21 años, 4 meses
Puntos: 1
lo puedes solucionar asi por ejemplo:
Código PHP:
for (z=0z<20z++){
  
this["REG_"+z] = z;

de ese modo es como se crean variables dinamicas
__________________
[D3X73®]
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:44.