Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-09-2015
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.025
Poder: 28
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Yo creo que sería más adecuado usar un TINIFile. Su método ReadSections devuelve la lista de secciones, por lo que no tendrás que ir adivinándolas. Luego ya puedes usar el resto de métodos para obtener, modificar, crear y/o eliminar valores y secciones.
Responder Con Cita
  #2  
Antiguo 02-09-2015
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 688
Poder: 22
olbeup Va camino a la fama
Cita:
Empezado por Ñuño Martínez Ver Mensaje
Yo creo que sería más adecuado usar un TINIFile. Su método ReadSections devuelve la lista de secciones, por lo que no tendrás que ir adivinándolas. Luego ya puedes usar el resto de métodos para obtener, modificar, crear y/o eliminar valores y secciones.
Hola walterk.

Como dice Ñuño Martínez, seria mejor utilizar el TINIFile, pero también añadiria al princio del fichero para saber ciertas cosas de él, como saber el último registro que se ha añadido el último acceso y quién lo ha realizado, se puede poner más y más cosas, para saber más y mejor el contenido del fichero.

Cita:
[Area.Record]
LastRecord=133
LastAccess=02/09/2015
LastIDUser=26

[Area.133]
Title=SA98
Local=SA98\SA98 SL
Layer=133
Active=TRUE
Required=FALSE
La labor que ha hecho ecfisa esta muy bien y se lo ha currado, pero cuando hay muchos registros puede ser un poco pesado.

Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #3  
Antiguo 02-09-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola olbeup.
Cita:
Empezado por olbeup Ver Mensaje
...
La labor que ha hecho ecfisa esta muy bien y se lo ha currado, pero cuando hay muchos registros puede ser un poco pesado.
La verdad, ahora no me parece una buena opción, creo que no capté correctamente la consigna de walterk:
Cita:
...no se como hacer que abra el archivo lea cual e el ultimo y agregue el numero incrementado a Area.134 y lo copie a layer...
Reviendo el texto, interpreto que se tiene que leer el último valor, incrementarlo en uno y reemplazar los valores anteriores. Y de ser así, el código del mensaje #5 no lo hace.

Saludos

Edito: Y si, definitivamente coincido con ustedes en la conveniencia de usar TIniFile en este caso.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 02-09-2015 a las 12:47:05.
Responder Con Cita
  #4  
Antiguo 02-09-2015
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 688
Poder: 22
olbeup Va camino a la fama
Un ejemplo con TIniFiles:

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IniFiles, StdCtrls;

type
  TAreaHead = record
    LastArea: Integer;
    LastAccess: TDateTime;
    LastIDUser: Integer;
  end;

  TArea = record
    Area: Integer;
    Title: String;
    Local: String;
    Active: Boolean;
    Required: Boolean;
  end;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    AreaHead: TAreaHead;

    procedure LoadHeadArea;
    procedure InsertArea(objArea: TArea);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  LoadHeadArea;
end;

procedure TForm1.LoadHeadArea;
var
  IniAH: TIniFile;
begin
  IniAH := TIniFile.Create('C:\Areas\Area.txt');
    AreaHead.LastArea   := IniAH.ReadInteger('Area.Record', 'LastRecord', 0);
    AreaHead.LastAccess := IniAH.ReadDate('Area.Record', 'LastAccess', 0);
    AreaHead.LastIDUser := IniAH.ReadInteger('Area.Record', 'LastIDUser', 0);
  FreeAndNil(IniAH);
end;

procedure TForm1.InsertArea(objArea: TArea);
var
  IniA: TIniFile;
begin
  IniA := TIniFile.Create('C:\Areas\Area.txt');
    IniA.WriteString('Area.' + IntToStr(objArea.Area), 'Title', objArea.Title);
    IniA.WriteString('Area.' + IntToStr(objArea.Area), 'Local', objArea.Local);
    IniA.WriteInteger('Area.' + IntToStr(objArea.Area), 'Layer', objArea.Area);
    IniA.WriteBool('Area.' + IntToStr(objArea.Area), 'Active', objArea.Active);
    IniA.WriteBool('Area.' + IntToStr(objArea.Area), 'Required', objArea.Required);

    IniA.WriteInteger('Area.Record', 'LastRecord', ObjArea.Area);
    IniA.WriteDate('Area.Record', 'LastAccess', Now);
    IniA.WriteInteger('Area.Record', 'LastIDUser', 36);

  IniA.UpdateFile;
  FreeAndNil(IniA);

  LoadHeadArea;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  xArea: TArea;
begin
  // Pedir datos de los registros y después insertarlos en el Area.txt

  FillChar(xArea, SizeOf(xArea), #0);
  
  xArea.Area      := AreaHead.LastArea +1;
  xArea.Title     := 'SOb';
  xArea.Local     := 'AS\SOL';
  xArea.Active    := True;
  xArea.Required  := False;

  InsertArea(xArea);
end;

end.

Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #5  
Antiguo 02-09-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola walterk.

olbeup te dió un muy buen ejemplo, pero ya escribí el código, así que te agrego otro

En este se seleccióna el mayor número del valor de la sección "Area" y se añade otra sección con el valor incrementado (sigo en dudas si deseas agregar una nueva o modificar el valor de la existente).
Código Delphi [-]
...

implementation

uses IniFiles;

const
  FNAME = 'c:\tmp\Areas.ini';

procedure AddNextSection(const FileName: TFileName);
var
  Sections  : TStringList;
  Values    : TStrings;
  IniFile   : TMemIniFile;
  NewArea,s : string;
  i, max    : Integer;
begin
  IniFile := TMemIniFile.Create(FNAME);
  try
    Sections := TStringList.Create;
    Values   := TStringList.Create;
    try
      IniFile.ReadSections(Sections);
      Sections.Sort;
      NewArea := Sections[Sections.Count-1];
      IniFile.ReadSectionValues(NewArea, Values);
      max := Pos('.', NewArea);
      max := StrToIntDef(Copy(NewArea, max+1, Length(NewArea)-max+1), 0);
      Inc(max);
      NewArea := Format('Area.%d', [max]);
      for i := 0 to Values.Count-1 do //(*)
      begin
        s := Values[i];
        if Pos('Layer=', s) <> 0 then s := Format('Layer=%d',[max]);
        IniFile.WriteString(NewArea, Copy(s, 1, Pos('=',s)-1),
          Copy(s, Pos('=',s)+1, MaxInt));
      end;
      IniFile.UpdateFile;
    finally
      Values.Free;
      Sections.Free;
    end;
  finally
    IniFile.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  AddNextSection(FNAME);
end;
(*) Se podría simplificar con el método IndexOfName pero Delphi 7 carece de StrictDelimiter y toma el espacio como delimitador.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 02-09-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 17
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Tambien se puede usar XML, ClientDataSet, Json

Si se usa ClientDataSet no tendrias problemas de eficiencia de busquedas y ademas ganarias todas las caracteristicas de un TDataSet. Filtrado, ordenado, cursores, controles Data-Aware
Responder Con Cita
  #7  
Antiguo 02-09-2015
walterk. walterk. is offline
Miembro
NULL
 
Registrado: ago 2015
Posts: 11
Poder: 0
walterk. Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola walterk.
En este se seleccióna el mayor número del valor de la sección "Area" y se añade otra sección con el valor incrementado (sigo en dudas si deseas agregar una nueva o modificar el valor de la existente).
Hola Ecfisa, antes que nada quiero agradecer a todos por sus aportes y la muy buena predisposicion que tiene.Bueno ahora contesto tu pregunta y la explayo un poco.

La idea es agregar siempre un area nueva y que se haga de forma automatica sin la necesidad de la intervencion del usuario que lo instale.
Para que se entinda mejor, yo diseño el escenario en cuestion y con inno setup realizo la instalacion dentro del programa ubicando donde lo tienen instalado a traves del registro de windows(segun usuario, disco "C","D","E",etc).Los datos del escenario al crealo yo los tengo e iria ubicado en "Title=", pero lo que no se como hacer es que abra el archivo verifique cual es el ultimo area que existe en el archivo y agregue mi area incrementando el numero anterior +1 y tome de la variable desde inno setup si es posible para agregar la ubicacion de donde se intalo el escenario para poner ese dato en "Local=", los valores "Active=" y "Required=" van asi por default.

Espero haber aclarado un poco el tema y de ser necesario agrego el codigo que realice en inno setup para aclarar mas el panorama.

Saludos
Responder Con Cita
  #8  
Antiguo 02-09-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola walterk.
Cita:
Empezado por walterk. Ver Mensaje
La idea es agregar siempre un area nueva y que se haga de forma automatica sin la necesidad de la intervencion del usuario que lo instale.
Entonces creo que el código anterior te podría llegar a servir. Para ejemplificarlo, agregué un ListBox al formulario y este código:
Código Delphi [-]
...
procedure TForm1.FormCreate(Sender: TObject);
begin
  ListBox1.Items.LoadFromFile(FNAME);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  AddNextSection(FNAME);
  ListBox1.Clear;
  ListBox1.Items.LoadFromFile(FNAME);
  ListBox1.TopIndex := ListBox1.Items.Count -1 ; 
end;

Resultado:


Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
[Inno Setup] InnoExtractor, aplicación para desempaquetar instaladores de Inno Setup NucleousXE Varios 4 28-10-2014 14:12:33
¿Cómo puedo editar archivo texto con inno setup? to_to Varios 3 23-01-2014 14:59:22
ayuda con inno setup elardk Varios 1 27-04-2012 01:46:19
Ayuda con Inno Setup davezf Varios 10 16-03-2005 20:18:49
Problema Archivo .INI con Inno SetUp 5 VRO Varios 6 12-01-2005 17:41:50


La franja horaria es GMT +2. Ahora son las 14:23:45.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi