¿Todavía no sabes cómo editar archivos INI desde Delphi? aqui te enseñaremos

Los archivos INI son archivos de texto que se utilizan para almacenar los datos de configuración de una aplicación.

 

Aunque Windows recomienda usar el Registro de Windows para almacenar datos de configuración específicos de la aplicación, en muchos casos, encontrará que los archivos INI proporcionan una forma más rápida para que el programa acceda a su configuración. El propio Windows incluso utiliza archivos INI; desktop.ini y boot.ini son sólo dos ejemplos.

 

Un simple uso de los archivos INI como mecanismo de guardado de estado, sería guardar el tamaño y la ubicación de un formulario si desea que el formulario vuelva a aparecer en su posición anterior. En lugar de buscar en toda una base de datos de información para encontrar el tamaño o la ubicación, se utiliza un archivo INI.

El formato de archivo INI

El archivo Initialization or Configuration Settings (.INI) es un archivo de texto con un límite de 64 KB dividido en secciones, cada una de las cuales contiene cero o más claves. Cada tecla contiene cero o más valores.

 

Aquí hay un ejemplo:

 [SectionName]

keyname1=value

;comment

keyname2=value

 

Los nombres de las secciones figuran entre corchetes y deben comenzar al principio de cada línea. Los nombres de las secciones y las claves no distinguen entre mayúsculas y minúsculas (el mayúsculas y minúsculas no importa), y no pueden contener caracteres espaciadores. El nombre de la clave va seguido de un signo igual ("="), rodeado opcionalmente de caracteres espaciados, que se ignoran.

Si la misma sección aparece más de una vez en el mismo archivo, o si la misma clave aparece más de una vez en la misma sección, prevalece la última ocurrencia.

 

Una clave puede contener un string, un entero o un valor booleano.

 

Delphi IDE utiliza el formato de archivo INI en muchos casos. Por ejemplo, los archivos.DSK (configuración del escritorio) utilizan el formato INI.

 

Clase TIniFile

Delphi proporciona a la clase TIniFile, declarada en la unidad inifiles.pas, métodos para almacenar y recuperar valores de archivos INI.

 

Antes de trabajar con los métodos TIniFile, debe crear una instancia de la clase:

 

 uses inifiles;

...

var

  IniFile : TIniFile;

begin

  IniFile := TIniFile.Create('myapp.ini') ;

El código anterior crea un objeto IniFile y asigna 'myapp.ini' a la única propiedad de la clase--la propiedad FileName--utilizada para especificar el nombre del archivo INI que se va a utilizar.

 

El código escrito arriba busca el archivo myapp.ini en el directorio \Windows. Una mejor manera de almacenar los datos de la aplicación es en la carpeta de la aplicación - sólo tiene que especificar la ruta completa del archivo para el método Create:

 

 // place the INI in the application folder,

// let it have the application name

// and 'ini' for extension:

iniFile := TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini')) ;

Lectura del INI

La clase TIniFile tiene varios métodos de "lectura". El ReadString lee un valor de cadena de una clave, ReadInteger. ReadFloat y similares se utilizan para leer un número de una llave. Todos los métodos "leídos" tienen un valor por defecto que se puede utilizar si la entrada no existe.

 

Por ejemplo, el ReadString se declara como:

 

function ReadString(const Section, Ident, Default: String): String; override;

 

Escribir al INI

El TIniFile tiene un método "write" correspondiente para cada método "read". Son WriteString, WriteBool, WriteInteger, etc.

Por ejemplo, si queremos que un programa recuerde el nombre de la última persona que lo usó, cuándo lo usó y cuáles eran las coordenadas de la forma principal, podríamos establecer una sección llamada Usuarios, una palabra clave llamada Último, Fecha de seguimiento de la información y una sección llamada Colocación con las teclas Arriba, Izquierda, Ancho y Altura.

 

 project1.ini

 [User]

 Last=Zarko Gajic

 Date=01/29/2009

 [Placement]

 Top=20

 Left=35

 Width=500

 Height=340

 

Tenga en cuenta que la tecla llamada Último tiene un valor de cadena, Fecha tiene un valor TDateTime, y todas las teclas de la sección Colocación tienen un valor entero.

El evento OnCreate del formulario principal es el lugar perfecto para almacenar el código necesario para acceder a los valores del archivo de inicialización de la aplicación:

 

 procedure TMainForm.FormCreate(Sender: TObject) ;

var

  appINI : TIniFile;

  LastUser : string;

  LastDate : TDateTime;

begin

  appINI := TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini')) ;

  try

    //if no last user return an empty string

    LastUser := appINI.ReadString('User','Last','') ;

    //if no last date return todays date

    LastDate := appINI.ReadDate('User', 'Date', Date) ;

    //show the message

    ShowMessage('This program was previously used by ' + LastUser + ' on ' + DateToStr(LastDate));

    Top := appINI.ReadInteger('Placement','Top', Top) ;

    Left := appINI.ReadInteger('Placement','Left', Left);

    Width := appINI.ReadInteger('Placement','Width', Width);

    Height := appINI.ReadInteger('Placement','Height', Height);

  finally

    appINI.Free;

  end;

end;

El evento OnClose del formulario principal es ideal para la parte del proyecto Save INI.

 

procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction) ;

var

  appINI : TIniFile;

begin

  appINI := TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini')) ;

try

    appINI.WriteString('User','Last','Zarko Gajic') ;

    appINI.WriteDate('User', 'Date', Date) ;

    with appINI, MainForm do

    begin

      WriteInteger('Placement','Top', Top) ;

      WriteInteger('Placement','Left', Left) ;

      WriteInteger('Placement','Width', Width) ;

      WriteInteger('Placement','Height', Height) ;

    end;

  finally

    appIni.Free;

  end;

end;

Secciones del INI

La sección EraseSection borra una sección entera de un archivo INI. ReadSection y ReadSections rellenan un objeto TStringList con los nombres de todas las secciones (y nombres de claves) en el fichero INI.

 

Limitaciones y desventajas del INI

La clase TIniFile utiliza la API de Windows que impone un límite de 64 KB a los archivos INI. Si necesita almacenar más de 64 KB de datos, debe utilizar el TMemIniFile.

 

Otro problema podría surgir si tiene una sección con más de 8 K de valor. Una forma de resolver el problema es escribir su propia versión del método ReadSection.

(0 votes)