Tema: Archivos Ini
Ver Mensaje Individual
  #2  
Antiguo 02-05-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Piensa que los archivos INI se tienen que adaptar a tus necesidades y no al revés. Me explico. Pueden guardarse valores en los archivos INI de este modo, si lo necesitas para algo (y tú sabrás para qué)

Código:
[Seccion]
Clave=valor1,valor2,valor3
Sin embargo, en principio nada te impide guardar la información de este otro modo:

Código:
[Seccion]
Clave1=valor1
Clave2=valor2
Clave3=valor3
Sobre todo si te es más útil guardar así la información, si luego te va a ser más sencillo acceder a ella y utilizarla.

Ahora bien, supongamos que tienes que leer un archivo INI en el que hay claves en que los datos se guardan como dices. Pues... ya habrá entonces varios modos de leer valores.

Seguramente, si eres tú el que guardas los datos de ese modo, será por algo, quiero decir, sabrás también cómo piensas leer los datos guardados de ese modo.

Por ejemplo. Si yo quisiera guardar el contenido de una variable "TStrings" en una determinada clave de un archivo INI, tal vez optaría por utilizar la propiedad "CommaText" de las variables "TStrings", de tal modo que luego podría recuperar el "TStrings" siguiendo el camino contrario.

Con esto ya te estoy proponiendo una posible manera de leer este tipo de datos, guardados de esa forma, separados por comas. La clase "TStrings" puede ayudarte, tal vez, en la tarea. Las variables de la clase "TStrings" sabrás que guardan elementos indexados, de este modo:

Código Delphi [-]
var
  t: TStrings;
begin
  t := TStringList.Create;
  t.Add('Un elemento');
  t.Add('Otro elemento');
  
  ShowMessage(t.Strings[0]); // Muestra "Un elemento"
  ShowMessage(t.Strings[1]); // Muestra "Otro elemento"

  t.Free;
end;

Pues bien, la propia clase "TStrings" también cuenta con una propiedad de nombre "CommaText", la cual podría devolverte sus elementos de este modo:

Código Delphi [-]
ShowMessage(t.CommaText); // Muestra "Un elemento, Otro elemento"

Y, la propiedad "CommaText" también puedes escribirla:

Código Delphi [-]
t.CommaText := "Un nuevo elemento, Otro nuevo elemento";

ShowMessage(t.Strings[0]); // Muestra ahora "Un nuevo elemento"
ShowMessage(t.Strings[1]); // Muestra ahora "Otro nuevo elemento"

¿Soy capaz de explicarme? Creo que me extiendo demasiado. El caso es que podrías los datos separados por comas de una determinada clave de un archivo INI, y asignar dichos datos separados por comas a la propiedad "CommaText" de una variable "TStrings" que tuvieras preparada a tal efecto.

De ese modo la clase "TStrings" haría el trabajo, y tú tendrías los diferentes datos separados por comas (ya por separado) en cada uno de los elementos de la variable "Tstrings" que utilizases, algo así como esto:

Código Delphi [-]
var
  i: integer;
  ini: TIniFile;
  t: TStrings;

begin
  ini := TIniFile.Create('C:\archivo.ini');
  t := TStringList.Create;

  t.CommaText := ini.ReadKey('Clave');

  for i := 0 to t.Count-1 do
  begin
    ShowMessage('Dato ' + IntToStr(i) + ':' t.Strings[i]);
  end;

  t.Free;
  ini.Free;
end;

El código anterior está escrito de memoria, así que los métodos y parámetros de estos pueden no corresponderse con la realidad, pero, la idea creo que más o menos queda clara.

Y bueno, terminar diciendo que seguramente pueda hacerse lo que dices de otras maneras. Que disculpes este rollo y que si te queda alguna duda la hagas saber por aquí a ver si alguien puede echarte una mano.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita