Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Leer fichero INI y mostrar SOLO secciones en un ListBox (https://www.clubdelphi.com/foros/showthread.php?t=93561)

ElChicoNuevo 14-11-2018 12:16:25

Leer fichero INI y mostrar SOLO secciones en un ListBox
 
Hola a todos,

Llevo horas peleando con esto y mi (escaso) conocimiento en la materia no me permite llegar más lejos...

Tengo un fichero INI tal que así:

Código:

[Sección1]
opcion1=valor
opción2=valor
opción3=valor

[Sección2]
opcion1=valor
opción2=valor

Mi necesidad es mostrar sólo el título de la sección en un ListBox (o lo que me sugiráis), luego ya veré como continuar. El problema es que los nombres de las secciones pueden variar, no son predefinidos, de modo que no puedo "llamarlos por su nombre", sino que el programa debería recorrer el fichero de alguna manera y obtener el nombre de la sección.

He estado dándole vueltas al procedimiento TIniFile.ReadSections(string,TStrings) pero no doy con la tecla adecuada

¿alguna sugerencia?

dec 14-11-2018 12:32:49

Hola a todos,

Echa un vistazo al siguiente código:

Código Delphi [-]
uses
  IniFiles;

procedure TForm1.FormCreate(Sender: TObject);
var
  IniFile: TIniFile;
begin
  IniFile := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'sample.ini');
  try
    IniFile.ReadSections(ListBox1.Items);
  finally
    IniFile.Free();
  end;
end;

Nota que el método "ReadSections" es lo que estás buscando. Lo que pasamos como argumento, en este caso, es la variable "Items" de un "ListBox", y, será en dicha variable donde se almacenen las secciones del archivo INI, todas ellas, independientemente de su nombre.

Casimiro Notevi 14-11-2018 12:36:18

Creo que este hilo puede servirte.

EDITO: Viene a ser lo que ha contestado dec.

dec 14-11-2018 12:41:22

Hola a todos,

Tiene un poco más de miga este asunto. Al parecer "ReadSections" sólo funciona en Windows. Por otro lado, "ReadSubsections" no tiene esa "limitación", y, aparentemente, el resultado es el mismo:

Código Delphi [-]
uses
  IniFiles;

procedure TForm1.FormCreate(Sender: TObject);
var
  IniFile: TIniFile;
begin
  IniFile := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'sample.ini');
  try
    IniFile.ReadSubSections('', ListBox1.Items);
  finally
    IniFile.Free();
  end;
end;

Casimiro Notevi 14-11-2018 13:15:09

Y a las malas, se lee como un fichero de texto y se buscan las líneas que empiecen por [.

ElChicoNuevo 14-11-2018 13:28:47

Cita:

Empezado por dec (Mensaje 529525)
Hola a todos,

Echa un vistazo al siguiente código:

Código Delphi [-]
uses
  IniFiles;

procedure TForm1.FormCreate(Sender: TObject);
var
  IniFile: TIniFile;
begin
  IniFile := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'sample.ini');
  try
    IniFile.ReadSections(ListBox1.Items);
  finally
    IniFile.Free();
  end;
end;

Nota que el método "ReadSections" es lo que estás buscando. Lo que pasamos como argumento, en este caso, es la variable "Items" de un "ListBox", y, será en dicha variable donde se almacenen las secciones del archivo INI, todas ellas, independientemente de su nombre.

MAGNÍFICO ¡JUSTO ESO!

Ahora tengo que entender ese código BIEN, pero si: te confirmo que funciona, es lo que busco y ya puedo continuar :-)

Más abajo veo que mencionas lo de que sólo funciona en windows... hasta ahora, lo que llevo hecho, es funcional en Windows y Android (era la idea inicial), pero voy a mirar ese punto que comentas.


MUCHAS GRACIAS!

dec 14-11-2018 14:11:30

Hola a todos,

Cita:

Empezado por ElChicoNuevo (Mensaje 529529)
MAGNÍFICO ¡JUSTO ESO!

Ahora tengo que entender ese código BIEN, pero si: te confirmo que funciona, es lo que busco y ya puedo continuar :-)

Más abajo veo que mencionas lo de que sólo funciona en windows... hasta ahora, lo que llevo hecho, es funcional en Windows y Android (era la idea inicial), pero voy a mirar ese punto que comentas.


MUCHAS GRACIAS!

Eso es lo que dice la documentación de Delphi, que, el método "ReadSections" sólo funciona en Windows.


La franja horaria es GMT +2. Ahora son las 23:17:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi