Array

Cómo editar archivos INI en Delphi

Concentrated African American woman brainstorming while coding data on desktop PC.

Los archivos INI son archivos basados en texto utilizados para almacenar una aplicación y datos de configuración de Apos; s.

Aunque Windows recomienda usar el Registro de Windows para almacenar datos de configuración específicos de la aplicación, en muchos casos, usted y amp; apos; encontrarán que los archivos INI proporcionan una forma más rápida para que el programa acceda a su configuración. Windows mismo incluso usa archivos INI; & amp; amp; nbsp; downter.ini & amp; amp; nbsp; y boot.ini & amp; amp; nbsp; siendo solo dos ejemplos.

Un uso simple de archivos INI y amp; amp; nbsp; como mecanismo de ahorro de estado sería guardar el tamaño y la ubicación de un formulario si desea que un formulario reaparezca 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.

Video destacado

El formato de archivo INI

El archivo de configuración de inicialización o configuración (.INI) es un archivo de texto con un límite de 64 KB dividido en secciones, cada una con cero o más claves. Cada clave contiene cero o más valores.

Aquí y amp; apos; s un ejemplo:

& lt; pre / & gt; & lt; pre & gt; [SectionName] & lt; br & gt ;
keyname1 = value & lt; br & gt ;
; comentario & lt; br & gt ;
keyname2 = value & lt; / br & gt; & lt; / br & gt; & lt; / br & gt; & lt; / pre & gt ;

Los nombres de sección están encerrados entre corchetes y deben comenzar al comienzo de una línea.La sección y los nombres clave no distinguen entre mayúsculas y minúsculas (el caso no importa) y no pueden contener caracteres de separación. El nombre de la clave es seguido por un signo igual (& amp; quot; = & amp; quot;), opcionalmente rodeado de caracteres espaciadores, 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, entonces prevalece la última ocurrencia.

Una clave puede contener cadena, entero o valor booleano .&erio; # x200B;

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

Clase TIniFile

Delphi proporciona la clase TIniFile , declarada en la unidad inifiles.pas , con 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:

& lt; pre / & gt; & lt; pre & gt; usa inifiles; & lt; br & gt ;
& lt; br & gt ;… var & lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; IniFile: TIniFile; & lt; br & gt ;
comenzar & lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; IniFile: = TIniFile.Create (& amp; appos; myapp.ini & amp; apos;); & lt; / br & gt; & lt; / br & gt; & lt; / br & gt; & lt; / br & gt; & gt;

El código anterior crea un objeto IniFile y asigna & amp; apos; myapp.ini & amp; apos; a la única propiedad de la clase & amp; # x2014; la propiedad FileName & amp; # x2014; utilizada para especificar el nombre del archivo INI que debe usar.

El código escrito anteriormente se ve & amp; amp; nbsp; para el archivo myapp.ini en el directorio Windows . Una mejor manera de almacenar los datos de la aplicación está en la carpeta application & amp; apos; s: solo especifique el nombre de ruta completo del archivo para el método Create :

& lt; pre / & gt; & lt; pre & gt; // coloque el INI en la carpeta de la aplicación, & lt; br & gt ;
// deje que tenga el nombre de la aplicación & lt; br & gt ;
// y & amp; apos; ini & amp; apos; para extensión: & lt; / br & gt; & lt; / br & gt;
& lt; br & gt ;
& lt; br & gt ;
iniFile: = TIniFile.Create (ChangeFileExt (Aplicación.ExeName, & amp; apos; .ini & amp; apos;)); & lt; / br & gt; & lt; / br & gt; & lt; & lt; / pre & gt ;

Lectura de INI

La clase TIniFile tiene varios & amp; quot; read & amp; quot; métodos. ReadString lee un valor de cadena de una clave, ReadInteger. ReadFloat y similares se usan para leer un número de una clave. Todos & amp; quot; read & amp; quot; Los métodos tienen un valor predeterminado que se puede usar si la entrada no existe.

Por ejemplo, ReadString se declara como:

& lt; pre / & gt; & lt; pre & gt; función ReadString ( const Sección, Ident, Default: String): String;

Escribir a INI

El TIniFile tiene un correspondiente & amp; quot; write & amp; quot; método para cada & amp; quot; read & amp; quot; método. Son WriteString, WriteBool, WriteInteger, etc.

Por ejemplo, si queremos que un programa recuerde el nombre de la última persona que lo usó, cuando era, y cuáles fueron las coordenadas de la forma principal, podríamos establecer una sección llamada Usuarios , Una palabra clave llamada Último , Fecha &erio;amperio;nbsp;para rastrear la información, y una sección llamada Colocación &erio;amperio;nbsp;con llaves Parte superior ,&erio;amperio;nbsp; Izquierda ,&erio;amperio;nbsp; Ancho , y Altura .

& lt; pre / & gt; & lt; pre & gt; project1.ini & lt; br & gt ;
& amp; amp; nbsp; [Usuario] & lt; br & gt ;
& amp; amp; nbsp; Last = Zarko Gajic & lt; br & gt ;
& amp; amp; nbsp; Fecha = 29/01/2009 & lt; br & gt ;
& amp; amp; nbsp; [Colocación] & lt; br & gt ;
& amp; amp; nbsp; Top = 20 & lt; br & gt ;
& amp; amp; nbsp; Izquierda = 35 & lt; br & gt ;
& amp; amp; nbsp; Ancho = 500 & lt; br & gt ;
& amp; amp; nbsp; Altura = 340 & lt; / br & gt; & lt; / br & gt; & lt; / br & gt; & lt; / br & gt; & lt; & lt; / br & gt; & lt; / br & lt; / br & gt;

Tenga en cuenta que la clave llamada Last tiene un valor de cadena, Date tiene un valor TDateTime y todas las claves en la sección Placement contienen un valor entero.

El evento OnCreate del formulario principal es el lugar perfecto para almacenar el código necesario para acceder a los valores en el archivo de inicialización de application & amp; apos; s:

& lt; pre / & gt; & lt; pre & gt; procedimiento TMainForm.FormCreate (Enviador: TObject); & lt; br & gt ;
var & lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; appINI: TIniFile; & lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; LastUser: string; & lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; LastDate: TDateTime; & lt; br & gt ;
comenzar & lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; appINI: = TIniFile.Create (ChangeFileExt (Application.ExeName, & amp; apos; .ini & amp; apos;)); & lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; intente & lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; // si ningún último usuario devuelve una cadena vacía & lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; LastUser: = appINI.ReadString (& amp; apos; User & amp; apos;, & amp; apos; Last & amp; apos; & amp; appos;); & lt;
& amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; // si no hay una fecha pasada, regrese a la fecha de hoy & lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; LastDate: = appINI.ReadDate (& amp; apos; User & amp; apos;, & amp; apos; Date & amp; apos ;, Fecha); & lt; br & gt ;
& lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; // mostrar el mensaje & lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; ShowMessage (& amp; apos; este programa fue utilizado anteriormente por & amp; apos; + LastUser + & amp; apos; on & amp; apos; + DateToStr (LastDate)); & lt; br & gt;
& lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; Top: = appINI.ReadInteger (& amp; appos; Placement & amp; appos;, & amp; appos; Top & amp; apos ;, Arriba); & lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; Left: = appINI.ReadInteger (& amp; appos; Placement & amp; appos; & amp; apos; Left & amp; apos ;, Izquierda); & lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; Ancho: = appINI.ReadInteger (& amp; apos; Placement & amp; apos;, & amp; apos; Ancho & amp; apos ;, Ancho); & lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; Height: = appINI.ReadInteger (& amp; appos; Placement & amp; appos; & amp; appos; Height & amp; apos; , Altura); & lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; finalmente & lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; appINI.Free; & lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; final ; & lt; br & gt ;
final ; & lt; / br & gt; & lt; / br & gt; & lt; / br & gt; & lt; / br & gt; & gt; & gt; & gt;

El evento OnClose de main form & amp; apos; s es ideal para la parte Save INI del proyecto.

& lt; pre / & gt; & lt; pre & gt; procedimiento TMainForm.FormClose (Enviador: TObject; var Acción: TCloseAction); & lt; br & gt ;
var & lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; appINI: TIniFile; & lt; br & gt ;
comenzar & lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; appINI: = TIniFile.Create (ChangeFileExt (Application.ExeName, & amp; apos; .ini & amp; apos;)); & lt; br & gt ;
intente & lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; appINI.WriteString (& amp; apos; User & amp; appos;, & amp; appos; Last & amp; apos; & amp; Apos; Zarko Gajic & amp;); & gt;
& amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; appINI.WriteDate (& amp; apos; User & amp; apos;, & amp; apos; Date & amp; apos; Date ;, Date); & lt; br & gt ;
& lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; con appINI, MainForm do & lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; comenzar & lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; nbsp; WriteInteger (& amp; apos; Placement & amp; apos; & amp; apos; Top & amp; apos;, Top); & lt;
& amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; nbsp; WriteInteger (& amp; apos; Placement & amp; apos; & amp; apos; Left & amp; apos;, Left); & lt;
& amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; nbsp; WriteInteger (& amp; apos; Placement & amp; apos; & amp; apos; Ancho & amp; apos;, ancho); & gt
& amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; nbsp; WriteInteger (& amp; apos; Placement & amp; apos; & amp; apos; Altura & amp; ; & gt;
& amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; final ; & lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; finalmente & lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; & amp; amp; nbsp; appIni.Free; & lt; br & gt ;
& amp; amp; nbsp; & amp; amp; nbsp; final ; & lt; br & gt ;
final ; & lt; / br & gt; & lt; / br & gt; & lt; / br & gt; & lt; / br & gt; & gt; & gt; & gt; & gt; & gt; & gt; & gt; & gt;

Secciones INI

La sección de borrado borra una sección completa de un archivo INI. ReadSection y ReadSections fill & amp; amp; nbsp; un objeto TStringList con los nombres de todas las secciones (y nombres clave) en el archivo INI.

Limitaciones INI & amp; amp; Desventajas

La clase TIniFile utiliza la API de Windows y amp; nbsp; que impone un límite de 64 KB en los archivos INI. Si necesita almacenar más de 64 KB de datos, debe usar TMemIniFile.

Podría surgir otro problema 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.

& amp; # x203A; Informática

Dejar respuesta

Please enter your comment!
Please enter your name here

FOLLOW US

Related Stories