Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-10-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por alt126
Y como cargo un archivo entero en una cadena???
Se me ocurren estas dos maneras: no dudo que existan otras mejores.


Código:
 void __fastcall TForm1::Button1Click(TObject *Sender)
 {
   AnsiString archivo = "C:\\archivo.txt";
   TStringList *temporal = new TStringList();
   try
   {
 	temporal->LoadFromFile(archivo);
 	ShowMessage(temporal->Text);
   }
   __finally
   {
 	temporal->Free();
   }
 }
Código:
 void __fastcall TForm1::Button2Click(TObject *Sender)
 {
   AnsiString archivo = "C:\\archivo.txt";
   TFileStream *fs = new TFileStream(archivo, fmOpenRead);
   TStringStream *ss = new TStringStream("");
   try
   {
 	ss->CopyFrom(fs, 0);
 	ShowMessage(ss->DataString);
   }
   __finally
   {
 	fs->Free();
 	ss->Free();
   }
 }
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #2  
Antiguo 03-10-2005
Avatar de ppb
[ppb] ppb is offline
Miembro Premium
 
Registrado: jun 2005
Ubicación: España
Posts: 109
Poder: 22
ppb Va por buen camino
Aunque no entiendo muy bien lo que te pasa , para no tener
problemas con los retorno de carro ( 0D0A ) maneja el fichero
en modo binario no en modo texto.
Responder Con Cita
  #3  
Antiguo 03-10-2005
Avatar de alt126
alt126 alt126 is offline
Miembro
 
Registrado: dic 2004
Posts: 171
Poder: 22
alt126 Va por buen camino
Pues va a ser que no....

...vamos a ver he probado lo de cargar el archivo de una vez con el Tstringlist, pero nada...

el archivo es este: archivo

Lo he puesto con extension .doc para poder subirlo. Si lo habris con un editor hexadecimal, podreis verlo perfectamente. Yo lo que quiero es obtener en una cadena todo el codigo hexadecimal. Porque hasta ahora para poder trabajar con el, lo que tengo que hacer es abrir el archivo con un editor hexadecimal, seleccionar todo el codigo y copiarlo a un archivo de texto.

La version hexadecimal de ese archivo es: archivohex

Asi que si alguien pudiera decirme como leer directamente el archivo y obtener ese codigo hexadecimal en una cadena y luego volver a pasarlo a otro archivo....

Muchas Gracias

Un saludo

Antonio
Responder Con Cita
  #4  
Antiguo 03-10-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
He preparado este ejemplo, que puede servir como base, como es tarde lo dejo así, solo queda darle algunos retoques:

Se necesita:
Un TOpenDialog y un StringGrid

Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    StringGrid1: TStringGrid;

    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);
var
  iFileHandle: Integer;
  iFileLength: Integer;
  iBytesRead: Integer;
  Buffer: PChar;
  i: Integer;
  j: Integer;
  begin
  if OpenDialog1.Execute then
  begin
    try
      iFileHandle := FileOpen(OpenDialog1.FileName, fmOpenRead);
      iFileLength := FileSeek(iFileHandle,0,2);
      FileSeek(iFileHandle,0,0);
      Buffer := PChar(AllocMem(iFileLength + 1));
      iBytesRead := FileRead(iFileHandle, Buffer^, iFileLength);

      FileClose(iFileHandle);
      for i := 0 to iBytesRead-1 do
      begin
      StringGrid1.RowCount := StringGrid1.RowCount + 1;

        StringGrid1.Cells[1,i+1] := Buffer[i];
        StringGrid1.Cells[2,i+1] := IntToHex(integer(Buffer[i]),2);
      end;
    finally
      FreeMem(Buffer);
    end;
  end;

end;

end.

Un Saludo
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #5  
Antiguo 04-10-2005
Avatar de alt126
alt126 alt126 is offline
Miembro
 
Registrado: dic 2004
Posts: 171
Poder: 22
alt126 Va por buen camino
funciona perooooooo...

he probado ese codigo, cambiado al c++ y funciona pero mirad lo que pasa:

Principio de la cadena, copiada de un editor hexadecimal
436F7079726967687420286329313939352044696E616D6963204D756C74696D65646961002090010...

Principio de la cadena, obtenida mediante el codigo anterior:
436F7079726967687420286329313939352044696E616D6963204D756C74696D656469610020FFFFFF90010

El principio es el mismo...ok...pero mirad las FFFFF...esta el archivo plagado de ellas...y no tienen porque salir, porque leyendo caracter a caracter no salen...

..alguien entiende algo?...ademas no puedo quitar todas las F, pq quitar algunas que si valen.

Pd.- pprey, no he podido probar tu codigo, pq no se como hacer un pas y usarlo en c++. Si pudieras pasarlo a c++..

Gracias a todos

Un saludo

Antonio
Responder Con Cita
  #6  
Antiguo 05-10-2005
pprey pprey is offline
Registrado
 
Registrado: sep 2005
Posts: 4
Poder: 0
pprey Va por buen camino
hex

Con respecto a pasartelo a C++ lo que te envie, ahora mismo no podría pasartelo a C++ porque no tengo mucho tiempo para ello. Por lo que veo ahora tienes problemas con las FFFF con el codigo que te paso otro compañero. Pues bien creo que el problema de las FFFF es que al pasar tu el codigo a C desde delphi, quizás tengas algun problema en los bucles. Mira bien tu codigo y los loops que haces, a ver si tienes algun problema con los indices.
Si tengo un momento y mi codigo te lo puedo pasar a C++, ya te lo enviaré o bien te mando un .pas para que lo incluyas en un paquete de buider.
Responder Con Cita
  #7  
Antiguo 05-10-2005
Avatar de alt126
alt126 alt126 is offline
Miembro
 
Registrado: dic 2004
Posts: 171
Poder: 22
alt126 Va por buen camino
El codigo que se puso traducido a c++ es mas o menos este:

if(odFichero->Execute())
{
equipo = odFichero->FileName;
iFileHandle = FileOpen(odFichero->FileName, fmOpenRead);
iFileLength = FileSeek(iFileHandle,0,2);
FileSeek(iFileHandle,0,0);
Buffer = PChar(AllocMem(iFileLength + 1));
iBytesRead = FileRead(iFileHandle, Buffer, iFileLength);
FileClose(iFileHandle);
for(int i=0;i < iBytesRead-1;i++)
{
cadenahex = cadenahex + IntToHex((int)(Buffer[i]),2);
}
}
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


La franja horaria es GMT +2. Ahora son las 08:42:06.


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