PDA

Ver la Versión Completa : Duda sacar el valor de una clave en archivos ini


lookmydoom
03-09-2008, 03:22:40
Que tal, tengo una duda con respecto al manejo de los archivos ini, mas concretamente con la lectura de valores de las claves.

Segun se la forma de leer un valor de una clave es atravez de la funcion readstring pero esta nececita como parametro el valor por default y no entiendo como puede devolver un valor que yo mismo le estoy dando en vez de sacarlo del archivo ini.

Por ejemplo si tuviera un archivo ini con la siguiente estructura

[MySeccion]
MyClave1=myvalor1
MyClave2=myvalor2
MyClave3=myvalor3

y el codigo fuera


procedure algo;
var valor:string;
begin
valor:=MyIniFile.readstring(MySeccion,MyClave1,'');
end;


Esto siempre me devuelve el valor en blanco o sea lo ponga como ultimo parametro en vez del valor real que seria "myvalor1 o myvalor2 o myvalor3"

Caro
03-09-2008, 04:03:15
Hola lookmydoom, supongo que MySection y MyClave1, deben ser variables, por eso no lo pones entre comillas. Te devuelve el valor por defecto, cuando la sección o clave no existen o no le has dado ningún valor a tu clave, revisa tu archivo.

Si fuera así:

[MySeccion]
MyClave1=myvalor1

este codigo debería devolverte myvalor1 en valor.


valor:=MyIniFile.readstring('MySeccion','MyClave1','');


Saluditos

lookmydoom
03-09-2008, 04:10:59
Bueno me respondo a mi mismo ya que debido a no revisar bien la forma en la que obtenía las claves me estaba dando ese error.

El orden que se debe usar para poder sacar el valor de una clave seria:

ReadSections //para que devuelva todas las secciones a un TStringList
ReadSection //que devolvera las claves de la correspondiente seccion y los metera en otro TStringList
ReadString //finalmente devuelve el valor de la calve

pero mejor pongo el ejemplo


var Secciones,Claves:TStringList; valor:String;
begin
Secciones:=Tstringlist.create;
Claves:=Tstringlist.create;
MyIniFile.ReadSections(Secciones); //Se supone que ya se creo el IniFile y se le asigno el arhivo correspondiente
MyIniFile.ReadSection(Secciones.Strings[0],Claves);
valor:=MyIniFile.ReadString(Seciones.Strings[0],Claves.Strings[0],'');
end;

Delphius
03-09-2008, 05:50:10
Bueno me respondo a mi mismo ya que debido a no revisar bien la forma en la que obtenía las claves me estaba dando ese error.

El orden que se debe usar para poder sacar el valor de una clave seria:

ReadSections //para que devuelva todas las secciones a un TStringList
ReadSection //que devolvera las claves de la correspondiente seccion y los metera en otro TStringList
ReadString //finalmente devuelve el valor de la calve

Hola lookmydoom,
En realidad esos métodos no implican ningún orden, en todo caso se refiere a una cuestión de necesidad.
Por ejemplo, si sólo quieres leer el valor de una clave de una determinada sección ¿que sentido tiene leer primero la sección, luego la clave y por último el valor si puede hacerse en un sólo paso?:confused:

ReadString('Sección','clave','valor_por_defecto');
A lo que voy es que si lo que necesita es conocer las secciones: ReadSections().
Si se desea saber cuales son las variables de una sección: ReadSection().

¿Se me entiende? Espero que si:o

Saludos,

lookmydoom
03-09-2008, 06:08:34
Pos si se me olvido mencionar eso de NECECIDAD por que justamente nececito de todo esto se haga en un bucle, por eso tengo que cargar las claves por cada seccion.