Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-11-2013
Metal_Kingdom Metal_Kingdom is offline
Registrado
NULL
 
Registrado: feb 2011
Posts: 3
Poder: 0
Metal_Kingdom Va por buen camino
Mostrar fichero en TMemo

Hola, solicito ayuda tras mil y un intentos y no encontrar una explicación lógica ni una solución al problema.

Pretendo mostrar en un Memo el contenido de un fichero cualquiera (sea *.exe, *.rar, etc; NO *.txt), y digo un memo como puedo decir un simple Showmessage.

Bien, al lío, probando este simple código:

Código Delphi [-]
procedure TForm1.Button3Click(Sender: TObject);
var
  F: file;
  ByteAct: byte;
  Res: string;
begin
  assignfile(F, 'c:\fichero.rar'); // Un fichero cualquiera
  reset(F, 1);
  while not eof(F) do
  begin
    blockread(F, ByteAct, 1);
    Res := Res + char(ByteAct);
  end;
  closefile(F);
  Memo1.Text := Res;
end;

Del modo anterior sólo se muestran los primeros bytes, por qué???

Para mostrarlos todos basta hacer esto:

Código Delphi [-]
procedure TForm1.Button3Click(Sender: TObject);
var
  F: file;
  ByteAct: byte;
  Res: string;
  i: integer;
begin
  assignfile(F, 'c:\fichero.rar'); // Un fichero cualquiera
  reset(F, 1);
  while not eof(F) do
  begin
    blockread(F, ByteAct, 1);
    Res := Res + char(ByteAct);
  end;
  closefile(F);
  for i := 1 to length(Res) do
    Memo1.Text := Memo1.Text + Res[i];
end;


Pero, volviendo al primer código, si se supone que estoy almacenando todo el fichero en la variable Res, por qué coj... sólo escribe los primeros bytes? en cambio recorriendolo byte a byte sí los escribe todos, qué sentido tiene? alguna solución?

Gracias por su atención.
Responder Con Cita
  #2  
Antiguo 14-11-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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 Metal_Kingdom.

Intenta de este modo:
Código Delphi [-]
procedure FileToTString(TS: TStrings; const aFileName: TFileName);
var
  F      : file;
  nRead  : Integer;
  Buffer : array[0..4095] of byte;
  Cadena : string;
  CadPtr : PChar;
begin
  AssignFile(F, aFileName);
  Reset(F, 1);
  TS.BeginUpdate;
  try
    repeat
      BlockRead(F, Buffer, SizeOf(Buffer), nRead);
      CadPtr := @Buffer;
      SetString(Cadena, CadPtr, nRead);
      TS.Add(Cadena);
    until nRead = 0;
  finally
    TS.EndUpdate;
  end;
  CloseFile(F);
end;

Uso:
Código Delphi [-]
...
  Memo1.Clear;
  FileToTString(Memo1.Lines, 'fichero.rar');

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 14-11-2013
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.275
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
Si estás abriendo un EXE, por ejemplo, imagino que hay caracteres que no son "imprimibles". Imagino que de alguna forma tendrás que convertir lo que lees a algo que se puede colocar en un memo.
Imagino que esta puede ser la razón por la que se te corta el texto.
__________________
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
  #4  
Antiguo 14-11-2013
Metal_Kingdom Metal_Kingdom is offline
Registrado
NULL
 
Registrado: feb 2011
Posts: 3
Poder: 0
Metal_Kingdom Va por buen camino
Cita:
Empezado por Neftali Ver Mensaje
Si estás abriendo un EXE, por ejemplo, imagino que hay caracteres que no son "imprimibles". Imagino que de alguna forma tendrás que convertir lo que lees a algo que se puede colocar en un memo.
Imagino que esta puede ser la razón por la que se te corta el texto.
Así es, pensé exactamente lo mismo, pero observa que en el segundo código sí se escriben todos los bytes, algo muy extraño.. si son los mismos bytes convertidos a char, inicialmente debería imprimirlos de una sola tirada sin tener que recorrer cada byte, es algo que no me cuadra.

Es decir, si yo hago un:
Código Delphi [-]
ShowMessage(Res);

Debería imprimir de una tirada los que sí imprime byte a byte usando un For:

Código Delphi [-]
for i: 1 to length(res) do
  Showmessage(Res[i]);

Es donde no encuentro el por qué.

Lo comprobaría con otros lenguajes, pero sólo dispongo de Delphi 7 y Delphi XE5.

PD: ecfisa, probaré de la manera que sugieres, en teoría debería funcionar, pero el misterio de que la otra forma no funcione sigue en pie jaja.

Sigo buscando, muchas gracias.
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
Mostrar resultado de query en tLabel o tmemo @-Soft SQL 7 14-04-2012 15:26:20
Mostrar primera linea de un campo Tmemo saldanaluis Varios 4 29-12-2010 17:48:28
Mostrar lista de elementos en un Rave, o un TMemo puede ser... HombreGordo Impresión 0 10-08-2008 08:49:18
Obtener un fichero adjunto a un nodo de un fichero XML muntasil Internet 0 18-07-2006 12:57:57
mostrar fichero linea a linea torete_86 C++ Builder 4 30-01-2006 20:14:39


La franja horaria es GMT +2. Ahora son las 10:45:47.


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