Comunidad de diseño web y desarrollo en internet online

Lectura de Archivos con clases

Citar            
MensajeEscrito el 15 Ene 2007 08:51 pm
Hola a todos, soy nuevo en el foro y les agradezco el que me puedan ayudar.

Comence a trabajar con ActionScript 2 y lo que intento hacer en este momento son 2 cosas:

1.- Leer un archivo .properties con una clase, encargada solamente de eso, leer el archivo y que me recolecte en dos atributos las variables que existen en el archivo .properties. Aqui va el codigo de mi archivo UtilFileProperties.as


Código :

class UtilFileProperties{

   var flujo:LoadVars;
   public var host_var:String;
   public var uri_var:String;
   var namefile:String;

    function UtilFileProperties(nameFile:String){
      flujo  = new LoadVars();
      this.namefile = nameFile;
      trace ("intentando leer archivo: "+nameFile);
   }
   
   function loadHost()
   {
      flujo.load(namefile);
      flujo.onLoad = function(exito) {
         if (exito) {
            this.host_var = this.host;
            trace("variable recuperada HOST: "+this.host_var);
         } else {
            trace( "No se puede leer el archivo " );
         }
      };
   }
   
   function loadURI():String
   {
      flujo.load(namefile);
      flujo.onLoad = function(exito) {
         if (exito) {
            this.uri_var = this.uri;
            trace("variable recuperada URI: "+uri_var);
         } else {
            trace( "No se puede leer el archivo " );
         }
      };
      return (uri_var);
   }
   
   function getHost_var():String
   {   return this.host_var;
   }
        
       function getUri_var():String
   {   return this.uri_var;
   }

}


Y este es el archivo resources.properties:

Código :

host=192.168.0.6&uri=miaplicacion


Ademas tengo un archivo .fla que hace uso de esta clase y en el codigo tengo lo siguiente:

Código :

propertyfile = new UtilFileProperties("resources.properties");
propertyfile.loadHost();
var host  = propertyfile.getHost_var();
trace ("HOST: "+host);


Al ejecutar el archivo .fla obtengo la siguiente salida:

Código :

intentando leer archivo: resources.properties
HOST: undefined
variable recuperada: 192.168.0.6


Esta claro que la clase lee correctamente el archivo .properties, pero no consigo pasar el valor de lo que se lee a mi variable en el archivo .fla. Y lo que me extraña, es el orden en el cual se se muestran los distintos 'trace' que hice.

Mi segundo problema lo enviaré en otro post. :P

Agradezco la atencion prestada a este post.

Un saludo

Por felippe

7 de clabLevel



Genero:Masculino  

opera
Citar            
MensajeEscrito el 15 Ene 2007 10:47 pm
El problema es que flash no ha cargado todavia el archivo, cuando tu mandas llamar "propertyfile.getHost_var()".

Saludos!

Por Cep

BOFH

1509 de clabLevel

9 tutoriales

1 ejemplo

Genero:Masculino   REC Bastard Operators From Hell

Web Developer

firefox
Citar            
MensajeEscrito el 16 Ene 2007 03:11 pm
Hola, gracias por responder.

En realidad, si me aseguro de que se lea el archivo, en la siguiente declaracion:



propertyfile = new UtilFileProperties("resources.properties");
propertyfile.loadHost();
var host = propertyfile.getHost_var();
trace ("HOST: "+host);


La declaracion en negrita, carga lee archivo y al hacer un 'trace' despliega lo siguiente:

Código :

variable recuperada HOST: 192.168.0.6

Ademas, ese valor es guardado en un atributo de la clase, el cual intento recuperarlo por medio del método getHost_var(), y el hecho es que no devuelve el valor apropiadamente.

Alguna otra sugerencia. Gracias, una vez mas.

Por felippe

7 de clabLevel



Genero:Masculino  

opera
Citar            
MensajeEscrito el 16 Ene 2007 03:22 pm
Veamos, el hecho de que mandes leer el archivo no significa que ya este cargado.

Repito:"El problema es que flash no ha cargado todavia el archivo, cuando tu mandas llamar "propertyfile.getHost_var()"."

Si no me crees ponte a pensar por que la diferencia de los trace que haces O.o, primero el trace de el timeline y después el trace de el onLoad, WOW espera, no, suguramente el archivo ya cargo!! :bate:

Por Cep

BOFH

1509 de clabLevel

9 tutoriales

1 ejemplo

Genero:Masculino   REC Bastard Operators From Hell

Web Developer

firefox
Citar            
MensajeEscrito el 16 Ene 2007 04:02 pm
Hola Cep, gracias por responder.

Intenté hacer lo siguiente: hice que el método loadHost, ademas de leer el archivo, asigne el atributo host_var y lo devuelva. El codigo quedó asi:

Código :

...
function loadHost():String

   {

      flujo.load(namefile);

      flujo.onLoad = function(exito) {

         if (exito) {

            this.host_var = this.host;

            trace("variable recuperada HOST: "+this.host_var);

         } else {

            trace( "No se puede leer el archivo " );

         }

      };
      
      return this.host_var;

   }
...


Pero aún sigue sin funcionar :( .
No comprendo el porqué no se recibe bien el valor que devuelve éste método.

Por felippe

7 de clabLevel



Genero:Masculino  

opera
Citar            
MensajeEscrito el 16 Ene 2007 04:42 pm
De nuevo, por lo mismo, tu estas regresando una variable que no esta asignada todavía.
La función loadHost termina cuando tu le das el return, pero todavía no carga el archivo, sin mencionar el scope de las variables etc.

Puedes hacerlo con métodos virtuales; tal como lo hace el objecto loadVars, el "evento" onLoad, no es mas que una función que tu sobre escribes (Método Virtual).

Un ejemplo:
La Clase

Código :

class UtilFileProperties {

   //Variables Privadas
   private var host_var:String;
   private var uri_var:String;
   private var namefile:String;
   
   //Metodos Virtuales
   public var onLoadHost:Function;
   public var onLoadUri:Function;
   
   function UtilFileProperties(nameFile:String) {
      this.namefile = nameFile;
      trace("intentando leer archivo: "+nameFile);
   }
   
   public function loadHost():Void {
      var scope = this;
      var lv:LoadVars = new LoadVars();
      lv.onLoad = function(exito) {
         if (exito) {
            scope.host_var = lv.host;
            scope.onLoadHost();
            trace("variable recuperada HOST: "+lv.host_var);
         } else {
            trace("No se puede leer el archivo ");
         }
      };
      lv.load(namefile);
   }
   
   public function loadURI():Void {
      var scope = this;
      var lv:LoadVars = new LoadVars();
      lv.load(namefile);
      lv.onLoad = function(exito) {
         if (exito) {
            scope.uri_var = lv.uri;
            scope.onLoadUri();
            trace("variable recuperada URI: "+lv.uri_var);
         } else {
            trace("No se puede leer el archivo ");
         }
      };
   }
   
   public function getHost_var():String {
      return this.host_var;
   }
   
   public function getUri_var():String {
      return this.uri_var;
   }
}


El Fla

Código :

var propertyfile:UtilFileProperties = new UtilFileProperties("resources.properties");
propertyfile.onLoadHost = function() {
   var host = propertyfile.getHost_var();
   trace("HOST: "+host);
};
propertyfile.onLoadUri = function (){
   trace("URI: "+propertyfile.getUri_var());
}
propertyfile.loadURI();
propertyfile.loadHost();


Tambien lo podrías hacer con listeners pero en este caso yo recomiendo mas un Método Virtual que listeners

Por Cep

BOFH

1509 de clabLevel

9 tutoriales

1 ejemplo

Genero:Masculino   REC Bastard Operators From Hell

Web Developer

firefox
Citar            
MensajeEscrito el 16 Ene 2007 08:04 pm
En verdad agradezco tu ayuda Cep, el codigo funciona muy bien.

Lo que me confunde aún es justamente el ámbito de las variables en ActionScript y la forma en que se ejecuta las declaraciones, pero acabo de encontrar un artículo sobre Ámbito de Variables en ActionScript en este mismo portal. Comprende que soy nuevo en este lenguaje.

Gracias por la paciencia y el aporte.

Por felippe

7 de clabLevel



Genero:Masculino  

opera
Citar            
MensajeEscrito el 16 Ene 2007 09:26 pm
Cuando trabajes con LoadVars y/o XML, recuerda que una cosa el la función en la cual creas el objecto, o mandas la petición de tu archivo o lo que sea, y otra cuando cargue este archivo, para eso esta el Método Virtual, onLoad. Es aquí donde tu ya tienes el archivo cargado, y ya puedes trabajar con el mismo.

Saludo!!

Por Cep

BOFH

1509 de clabLevel

9 tutoriales

1 ejemplo

Genero:Masculino   REC Bastard Operators From Hell

Web Developer

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.