miércoles, 15 de septiembre de 2010

Lectura de ficheros INI sin secciones con Inno Setup desde código

En este post voy a poner un código de ejemplo en el cual se parsea un fichero INI sin secciones (fichero INI estilo UNIX) desde el Inno Setup.
Para esto hay que crear el código en la sección [Code] de este programa.

[Code]
var
    ConfigValues:    TArrayOfString;

function LeeFicheroConfiguracion (FileName: String): Boolean;
begin
    Result := LoadStringsFromFile (FileName, ConfigValues);
end;

function ObtieneValorEtiqueta (Etiqueta: String; var Value: String): Boolean;
var
    I:        LongInt;
    L:        LongInt;
    S:        String;
begin
    S := Etiqueta + '=';
    L := Length (S);
    For I := 0 to GetArrayLength (ConfigValues) - 1 do
    begin
        if (copy (ConfigValues [I], 1, L) = S) then
        begin
            Value := copy (ConfigValues [I], L + 1,
                Length (ConfigValues [I]) - L);
            Result := TRUE;
            Exit;
        end;
    end;
    Result := FALSE;
end;

function EscribeValorEtiqueta (Etiqueta: String; Value: String): Boolean;
var
    I:        LongInt;
    L:        LongInt;
    A:        LongInt;
    S:        String;
begin
    S := Etiqueta + '=';
    L := Length (S);
    A := GetArrayLength (ConfigValues);
    For I := 0 to A - 1 do
    begin
        if (copy (ConfigValues [I], 1, L) = S) then
        begin
            ConfigValues [I] := S + Value;
            Result := TRUE;
            Exit;
        end;
    end;
    SetArrayLength (ConfigValues, A + 1);
    ConfigValues [A] := S + Value;
    Result := FALSE;
end;

function EscribeFicheroConfig (FileName: String): Boolean;
var
    bRet:    Boolean;
begin
    // FileName -> Backup.
    bRet := FileCopy (FileName,
        ExpandConstant ('{tmp}\' + ExtractFileName (FileName)),
        FALSE);
    if (bRet) then
    begin
        bRet := SaveStringsToFile (FileName, ConfigValues, FALSE);
        if (bRet) then
        begin
            Result := TRUE;
            Exit;
        end else
        begin
            // Maybe the backup file should be copied back here?
        end;
    end;
    Result := FALSE;
end;


Espero que le sirva a la gente que haya tenido el mismo problema que yo.


Saludos.

No hay comentarios:

Publicar un comentario