Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como leer varias lineas en un archivo .ini (https://www.clubdelphi.com/foros/showthread.php?t=95640)

JoAnCa 03-04-2022 03:00:31

Como leer varias lineas en un archivo .ini
 
Hola a todos
Pues estoy creando una aplicacion que manejará varias rutas de archivos, que las guarda en una archivo .ini.
Al iniciar la aplicacion, esta debe leer el archivo de rutas (.ini) y cargarlas en un stringrid.
Las rutas se pueden añadir o eliminar, tantas como se necesite.


Se como crear el .ini, y tambien como leer una clave con ReadString, conociendo el nombre de la clave.


Pero como no se sabe cuantas rutas estan guardadas, pues estas pueden variar con cada ejecucion del programa, no se como leerlas para cargarlas en el StringGrid.


La estructura del ini seria como esta:


[Destinos]
destino1=d:\carpeta1
destino2=d:\ruta2
...
destinoN=e:\laotraruta



Como puedo cargar todas esas rutas en el stringGrid ?

MAXIUM 03-04-2022 03:56:15

Como los archivos .ini son solo archivos de texto plano, se me ocurre que lo cargues con un TStringList.
Su un índice de ese Stringlist es '[Destinos]', entonces el siguiente lo tratas hasta final del archivo o hasta que sea un '[Algo]'

ecfisa 03-04-2022 04:06:37

Hola.

Un ejemplo, de como podrías cargar las líneas en un TStringGrid.
Código Delphi [-]
var
  ini: TIniFile;
  TS : TStrings;
begin
  ini := TIniFile.Create('archivo.ini');
  TS  := TStringList.Create;
  try
    ini.ReadSectionValues('Destinos', TS);
    StringGrid1.RowCount := TS.Count; // lineas necesarias
    StringGrid1.ColWidths[0] := 300; // espacio necesario para mostrar el texto
    StringGrid1.Cols[0] := TS;
  finally
    ini.Free;
    TS.Free;
  end;
end;

Saludos :)

JoAnCa 03-04-2022 15:57:41

Cita:

Empezado por ecfisa (Mensaje 546366)
Hola.

Un ejemplo, de como podrías cargar las líneas en un TStringGrid.
Código Delphi [-]var ini: TIniFile; TS : TStrings; begin ini := TIniFile.Create('archivo.ini'); TS := TStringList.Create; try ini.ReadSectionValues('Destinos', TS); StringGrid1.RowCount := TS.Count; // lineas necesarias StringGrid1.ColWidths[0] := 300; // espacio necesario para mostrar el texto StringGrid1.Cols[0] := TS; finally ini.Free; TS.Free; end; end;


Saludos :)


Gracias por la respuesta, pero no me funciono como se esperaba al llenar el stringgrid.
En lugar de almacenarme el valor de la clave (d:\carpeta1), almacena la linea completa (destino1=d:\carpeta1)
Ademas de que me comienza en la fila 0, y necesito que sea en la 1, pues no quiero que me escriba en el encabezado, porque el stringrid tiene 3 columnas

JoAnCa 03-04-2022 16:03:52

Lo resolvi de esta manera:
Código Delphi [-]
      
      valores:=TStringList.Create;
      MiFicheroIni.ReadSectionValues('Destinos', valores);
      for j:=1 to Valores.Count do
      begin
        sgDestinos.Cells[0,j]:=MiFicheroIni.ReadString('Destinos', 'Destino'+IntToStr(j), '');
        sgDestinos.RowCount:=j+1;
      end;

mamcx 03-04-2022 20:33:32

Cuando dudes que hace una clase, mira toda su documentación:

https://docwiki.embarcadero.com/Libr...niFile_Methods

https://docwiki.embarcadero.com/Libr...e.ReadSections

Neftali [Germán.Estévez] 04-04-2022 09:51:20

Cita:

Empezado por JoAnCa (Mensaje 546363)
La estructura del ini seria como esta:

Cita:

[Destinos]
destino1=d:\carpeta1
destino2=d:\ruta2
...
destinoN=e:\laotraruta
Como puedo cargar todas esas rutas en el stringGrid ?

Puedes cagar "de golpe" todos los valores que hay dentro de una sección(Destinos) en un TStringList.
Revisa RedSectionValues (https://docwiki.embarcadero.com/Libr...dSectionValues)
Código Delphi [-]
var
  iniFile:TIniFile;
  sl:TStrings;
begin
  ...
  sl := TStringList.Create;
  iniFile.ReadSectionValues('Destinos', sl);


La franja horaria es GMT +2. Ahora son las 15:37:30.

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