Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   String mayor a 255 para record (https://www.clubdelphi.com/foros/showthread.php?t=64786)

totote 19-04-2009 00:24:44

String mayor a 255 para record
 
Buenas gente, necesito guardar en un archivo de registro tres datos, un título un link a un sitio de internet y una descripción que es un código html, pero resulta que la descripción por lo general tiene más de 255 caracteres y ahí es cuando se me complica, hay a alguna forma de extender el tamaño de los String?

mi registro está compuesto de la siguiente forma

Código Delphi [-]
THistorial = record
    Titulo: String[255];
    Link: String[255];
    Descripcion: String[255];
  end;

Saludos :D

dec 19-04-2009 00:39:57

Hola,

No sé si dependerá de alguna directiva de compilación o algo así, pero, yo puedo declarar el tipo tal que así, sin problemas:

Código Delphi [-]
type
  THistorial = record
    Link: String;
    Titulo: String;
    Descripcion: String;
  end;

Creo que Delphi es muy capaz de trabajar con algo así. No sé si algún otro compañero podrá añadir algo al respecto. ;)

totote 19-04-2009 00:46:44

lo intenté, pero cuando declaro un archivo del tipo registor me devuelve este error

[DCC Error] Principal.pas(165): E2155 Type 'THistorial' needs finalization - not allowed in file type

para declarar uso este código

Código Delphi [-]
var
   Reg: file of THistorial;
begin
//....
end;

dec 19-04-2009 01:00:48

Hola,

Hum... me temía algo así... pero, como no especificaste si era un tipo para usar en un archivo (o no leí bien tu mensaje), por eso dije lo que dije... pero, sí es cierto que me suena alguna limitación en el caso que dices. Lamento no poder darte ninguna solución en este caso: no tengo idea de si sería posible, o tendrías que conformarte con los 255 caracteres (supongo que no...), lo lamento de veras. :(

DarkMan 19-04-2009 01:06:37

Realmente si es necesario especificar un límite en cada string, de lo contrario cada registro tendría un tamaño diferente, es por ello que depende de la longitud de los strings que contenga. Puedes probar a usar AnsiString en lugar de String:

Código Delphi [-]
THistorial = record
    Titulo: String[255];
    Link: String[255];
    Descripcion: AnsiString[1000];
  end;

Para comprobar lo que digo, prueba a ver el tamaño de las dos estructuras (la que tu mostraste, y la de Dec) con SizeOf() y notarás la diferencia.

Un saludo.

totote 19-04-2009 01:11:03

Bueno dec gracias igual, he puesto una solución temporlamente para siempre hasta que encuentre algo mejor, pero el registro me ha quedado así

Código Delphi [-]
THistorial = record
    Titulo: String[255];
    Link: String[255];
    D1: String[255];
    D2: String[255];
    D3: String[255];
    D4: String[255];
  end;

y para separarlo lo hago de esta forma

Código Delphi [-]
procedure GuardarHistorial;
var
  Reg: file of THistorial;
  Historial: THistorial;
  LHistroial: TLink;
  i: Integer;
  aux: String;
begin
  AssignFile(Reg,Opciones.AppDir + 'Historial.dat');
  Rewrite(Reg);
  //....
      if Length(aux) > 255 then
      begin
        Historial.D1:= Copy(aux,1,255);
        Delete(aux,1,255);
        if Length(aux) > 255 then
        begin
          Historial.D2:= Copy(aux,1,255);
          Delete(aux,1,255);
          if Length(aux) > 255 then
          begin
            Historial.D3:= Copy(aux,1,255);
            Delete(aux,1,255);
            Historial.D4:= aux;
          end
          else
            Historial.D3:= aux;
        end
        else
          Historial.D2:= aux;
      end
      else
        Historial.D1:= aux;
      Write(Reg,Historial);
//...
  CloseFile(Reg);
end;

totote 19-04-2009 01:15:36

DarkMan, me devuelve este error si lo hago de tu forma

[DCC Error] Principal.pas(294): E2029 ';' expected but '[' found

DarkMan 19-04-2009 03:11:04

Cita:

Empezado por totote (Mensaje 345445)
DarkMan, me devuelve este error si lo hago de tu forma

[DCC Error] Principal.pas(294): E2029 ';' expected but '[' found

Vaya, tienes razón. Por lo pronto se me ocurre otra solución más viable:

Código Delphi [-]
THistorial = record
    Titulo: String[255];
    Link: String[255];
    Descripcion: Array [0..1000] of Char;
  end;

Puedes trabajar con Descripcion como si un string se tratara.

Un saludo.


La franja horaria es GMT +2. Ahora son las 07:51:19.

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