Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-03-2022
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Actualizar archivo ini con variables

Hola amigos.
Con Delphi 7, como puedo hacer para actualizar algunas variables de un archivo .ini que me vienen informadas desde otra lado.
De antemano no se cual va a ser la sección y las variables a modificar.
Este es el código que estoy utilizando pero no funciona, no da error y no actualiza.
De antemano, gracias

Código Delphi [-]
      sl.Text := lResCU.Content;
      lsection := '';
      lvar := '';
      lvalue := '';
      for i := 0 to sl.Count-1 do
      begin
        if LeftStr(sl[i],1) = '[' then
          lsection := sl[i]
        else
        begin
          lvar := sl.Names[i];
          lvalue := sl.Values[sl.Names[i]];
        end;
        if (lsection <> '') and (lvar <> '') then
        begin
          inifile.WriteString(lsection, lvar, lvalue);
          lvar := '';
          lvalue := '';
        end;
      end;
Responder Con Cita
  #2  
Antiguo 23-03-2022
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.298
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Personalmente no he entendido muy bien la explicación. Comentas que no sabes de antemano "cual va a ser la sección y las variables" a modificar (entiendo que quieres decir en diseño).

El código que has puesto tampoco ayuda. Tú debes saber para qué se usan las variables y objetos que ahí aparecen, pero para los demás no son más que letras.
En estos casos (para tí y para los demás) creo que es más sencillo que plantees el trabajo que debes hacer como un procedimiento. Lo independiza del resto de tu código (bueno para tí) y ayuda a los demás a entenderlo, probarlo y modificarlo (bueno para los demás).

Según lo que he entendido (aunque no lo tengo claro), necesitas algo como esto:

Código Delphi [-]
procedure ActualizarVariables(AInifile:TInifile; const ASeccion, AVariable, AValor:string);

Es un ejemplo. Tal vez podría ser algo como est:
Código Delphi [-]
procedure ActualizarVariables(const APathInifile:string; const ASeccion, AVariable, AValor:string);
procedure ActualizarVariables(const APathInifile:string; const ASeccion, AVariable:string; AValor:integer);

Si montas un procedimiento como este, te será fácil usarlo y probarlo y para nosotros también es mucho más sencillo poder probarlo y modificarlo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 23-03-2022
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Lo que quise decir es que este es un programa que se ejecuta en cada pc de un call-center para actualizar el archivo .ini que tiene cada una. Esto lo hace levantando un inifile desde el servidor, que contiene las secciones y variables nuevas para ser actualizadas en las pc's. No sirve actualizar un inifile entero porque cada pc tiene variables y secciones particulares. Entonces de antemano no se que secciones y variables va a contener.

sl.Text := lResCU.Content;

Con esta línea de código guardo en un stringlist el contenido del inifile del servidor.
Al recorrer SL voy volcando la sección, las variables y el valor para que una vez que sean distintas de '' actualice en inifile

Espero haber aclarado mi intención.
Gracias
Responder Con Cita
  #4  
Antiguo 23-03-2022
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.298
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por jars Ver Mensaje
este es un programa que se ejecuta en cada pc de un call-center para actualizar el archivo .ini que tiene cada una.
Cita:
Empezado por jars Ver Mensaje
Esto lo hace levantando un inifile desde el servidor, que contiene las secciones y variables nuevas para ser actualizadas en las pc's.
Lo que no entiendo es porqué necesitas utilizar un TStringList si tienes un IniOrigen(Servidor) y un IniDestino(de cada PC).
Lee del primero directamente y crea/actualiza en el segundo.

Tienes un métdo para leer todas las secciones del fichero INI del servidor: ReadSections
Y a partir de ahí puedes conseguir todos los valores de cada sección (obtenida con el método anterior): ReadSectionValues

Por lo que he entendido sólo debes recorrer el INI del servidor y copiar los valores en el INI de cada PC.
Se aplica lo mismo de antes:

Código Delphi [-]
procedure UpdateValues(const APathIniOrigen, APathIniDestino:string);
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 23-03-2022
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
El problema no es leer el inifile del servidor, lo que me falla es la actualizacion de los inifile de las pc's
Te pongo un ejemplo:

INIFILE pc (a actualizar)
[seccion1]
var1=1
var2=2
var3=3

[seccion2]
var21=1
var22=2
var23=3

[seccion3]
var31=1
var32=2
var33=3


INIFILE servidor
[seccion2]
var21=500
var23=600

[seccion3]
var31=1000

No es copiar el contenido del servidor en la pc, es actualizar algunas variables.
Responder Con Cita
  #6  
Antiguo 23-03-2022
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.062
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pon tu código y ¿qué quieres decir con "actualizacion de los inifile de las pc's"?
Responder Con Cita
  #7  
Antiguo 23-03-2022
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Este es el codigo:

Código Delphi [-]
procedure UpdateParamsFile;
var
  sl: TStringList;
  lResCU: TServiceCustomAnswer;
  i: Integer;
  lsection: string;
  lvar, lvalue: string;
begin 
  lResCU.Status := 0;
  lResCU.Content := '';
  // este servicio me devuelve el contenido del inifile del servidor
  lResCU := ARService.FileService_GetContentFile('\MainUpd\ParmsUpdate.ini');
  if lResCU.Status <> 200 then
  begin
    Log('@E cannot get the ParmsUpdate.ini file: %s', [lResCU.Content]);
    ShowMessage('No se puedo obtener el archivo: '+lResCU.Content)
  end else
  begin
    // este es el inifile de las pc's
    inifile := TIniFile.Create('c:\WorkDir\Params.ini');
    sl := TStringList.Create;
    sl.Text := lResCU.Content;
    lsection := '';
    lvar := '';
    lvalue := '';
    for i := 0 to sl.Count-1 do
    begin
      if LeftStr(sl[i],1) = '[' then
        lsection := sl[i]
      else
      begin
        lvar := sl.Names[i];
        lvalue := sl.Values[sl.Names[i]];
      end;
      if (lsection <> '') and (lvar <> '') then
      begin
        inifile.WriteString(lsection, lvar, lvalue); // esta linea no actualiza nada en el inifile
        lvar := '';
        lvalue := '';
      end;
    end;
  end;
  sl.Free;
end;
Responder Con Cita
  #8  
Antiguo 23-03-2022
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.298
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Siguiendo lo que te he comentado, con un procedimiento como este:

Código Delphi [-]
procedure UpdateValues(const APathIniOrigen, APathIniDestino:string);
var
  IniServidor, iniPC:TIniFile;
  secciones, valores:TStrings;
  i, j:integer;
begin
  IniServidor := TIniFile.Create(APathIniOrigen);
  iniPC := TIniFile.Create(APathIniDestino);
  secciones := TStringList.Create;
  valores := TStringList.Create;
  try
    // Cargar todas las secciones (nombres)
    IniServidor.ReadSections(Secciones);
    // recorrer las secciones...
    for i := 0 to (secciones.Count - 1) do begin
      // Leer los valores de cada sección
      IniServidor.ReadSectionValues(Secciones[i], valores);
      // recorer los valores de cada seccion
      for j := 0  to (Valores.Count - 1) do begin
        // Para cada valor actualizar con el del Servidor (si no existe lo creará, si existe lo actualiza)
        iniPC.WriteString(Secciones[i], valores.Names[j], valores.ValueFromIndex[j]);
      end;
    end;
    // Actualizar el fichero del PC
    iniPc.UpdateFile;
  finally
    IniServidor.Free;
    IniPC.Free;
  end;
end;

Si lo llamas de la siguiente manera:

Código Delphi [-]
UpdateValues('\MainUpd\ParmsUpdate.ini', 'c:\WorkDir\Params.ini');

El resultado será algo así (que creo que es lo que necesitas):

Código:
[seccion1]
var1=1
var2=2
var3=3

[seccion2]
var21=500
var22=2
var23=600

[seccion3]
var31=1000
var32=2
var33=3
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 23-03-2022
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
German, es tal cual lo que necesitaba.
Muchas gracias
Responder Con Cita
  #10  
Antiguo 24-03-2022
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.298
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Ya se que a veces cuesta hacerlo desde el inicio, pero una vez que has puesto los ejemplos y has explicado un poco mejor el problema, era fácil de entender y fácil de solucionar.


Por eso lo engo puesto...

__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Actualizar una tablas desde un archivo de texto. rg5820 Firebird e Interbase 3 07-08-2018 10:18:30
Actualizar archivo marilinspi Varios 11 05-03-2009 15:43:25
Variables en Archivo _TLB Paulao Varios 0 15-07-2008 19:38:47
Actualizar Tabla con archivo .txt bohemioloco Conexión con bases de datos 1 07-11-2006 15:46:24
variables variables (manual php) salvica PHP 0 25-09-2005 16:44:52


La franja horaria es GMT +2. Ahora son las 15:49:07.


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
Copyright 1996-2007 Club Delphi