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 30-05-2007
PTW PTW is offline
Miembro
 
Registrado: abr 2004
Posts: 55
Poder: 21
PTW Va por buen camino
Pasar ficheros binarios a texto

Hola a todos!!

Necesito hacer un programa que lea un ficheros binario del disco duro y cree un fichero de texto con su contenido. Del contenido fichero binario no sé ninguna información en cuanto a la estructura que tiene

al no conocer la estrcutra que tiene, ¿debo leerlo byte a byte, o con un TFileStream?

¿Me podeis echar un cable u orientarme un poco?

Muchas gracias
Responder Con Cita
  #2  
Antiguo 30-05-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cool Ok

Debes realizar una lectura byte por byte, cuando encuentres un caracter de texto ['a'..'z', 'A'..'Z', ' ', '.'..... etc ....'?'] debes verificar si los siguientes N (por ejemplo 4) caracteres tambien son texto, en tal caso escribes esos N bytes en otro archivo... no olvides inclur el #13#10.

Suerte!
Responder Con Cita
  #3  
Antiguo 30-05-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
No entiendo muy bien lo que necesitas, pero aquí te dejo un código que puede que te sirva:

http://www.clubdelphi.com/foros/show...71&postcount=2
Responder Con Cita
  #4  
Antiguo 31-05-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cool Solucion

Creo que te es mas util el siguiente código... use pura API porque me gusta. Para las cadenas Unicode debes contar como un caracter si, un 0, otro si otro 0, etc, etc... para aumentar el "rango" cambia agrega contenido a la func. IsLetter.

Código Delphi [-]
function IsLetter(const Char: System.Char): LongBool;
begin
 Result := Char in ['a'..'z', 'A'..'Z', '0'..'9', ' '];
end;

const CrLf: Word = $0A0D;
var hFile, Index, Size, Dummy: Cardinal; lpBuffer: PChar;
begin
 hFile := CreateFile('c:\ntldr', GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
 lpBuffer := MapViewOfFile(CreateFileMapping(hFile, nil, PAGE_READONLY, 0, 0, nil), FILE_MAP_READ, 0, 0, 0);
 Size := GetFileSize(hFile, nil);
 CloseHandle(hFile);

 hFile := CreateFile('c:\ntldr.txt', GENERIC_WRITE, 0, nil, CREATE_ALWAYS, 0, 0);
 Index := 0;
 while Index < Size do
  begin
   if ((Size - Index) > 3) and
      IsLetter(lpBuffer[Index]) and
      IsLetter(lpBuffer[Index + 1]) and
      IsLetter(lpBuffer[Index + 2]) and
      IsLetter(lpBuffer[Index + 3]) then
    begin
     while (Index < Size) and IsLetter(lpBuffer[Index]) do
      begin
       WriteFile(hFile, lpBuffer[Index], 1, Dummy, nil);
       Inc(Index);
      end;
     WriteFile(hFile, CrLf, 2, Dummy, nil);
    end
   else
    Inc(Index);
  end;
 CloseHandle(hFile);
end;

Espero te sirva.
Suerte!
Responder Con Cita
  #5  
Antiguo 31-05-2007
PTW PTW is offline
Miembro
 
Registrado: abr 2004
Posts: 55
Poder: 21
PTW Va por buen camino
Pues son unos ficheros que genera un programa (tienen extensión .B00). Si lo intentas abrir con un editor de texto aparecen caracteres extraños, no se puede leer. Y necesito generar un fichero de texto, y escribir el contenido de ese fichero en codigo Ascii.
Responder Con Cita
  #6  
Antiguo 31-05-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Cita:
Empezado por PTW
Del contenido fichero binario no sé ninguna información en cuanto a la estructura que tiene
///////////
Pues son unos ficheros que genera un programa (tienen extensión .B00). Si lo intentas abrir con un editor de texto aparecen caracteres extraños, no se puede leer. Y necesito generar un fichero de texto, y escribir el contenido de ese fichero en codigo Ascii.
Pues dado que no puedes aportar mucho sobre el asunto, antes de comenzar con algoritmo alguno, también deberías considerar que el programa tiene su propio formato e incluso, porque no, tal vez codifique esos ficheros para que nadie los pueda leer.

Ese programa tiene nombre ?
Sirve para algo en concreto ?
Solamente procesa texto ?

En fin son unas cuestiones dignas de tener en cuenta antes de leer Ascii ¿No crees?
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #7  
Antiguo 31-05-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cool Asi es!


Cita:
Empezado por ArdiIIa
...
Ese programa tiene nombre ?
Sirve para algo en concreto ?
Solamente procesa texto ?
...
Concuerdo con ArdiIIa, lo peor del asunto es que revisando éste link dice que es un gráfico!!!

Es un archivo pequeño? por que no lo comprimes y lo subes para ver si te podemos ayudar? y porfavor explicanos bien!

Saludos

Última edición por cHackAll fecha: 31-05-2007 a las 03:25:23.
Responder Con Cita
  #8  
Antiguo 31-05-2007
PTW PTW is offline
Miembro
 
Registrado: abr 2004
Posts: 55
Poder: 21
PTW Va por buen camino
Hola de nuevo. Perdon por el retraso en contestar.

Efectivamente, esos ficheros con extensión B00 contienen información sobre imágenes. Es un programa sobre copias digitales de fotografias

Del fichero en cuestion, me interesa sacar la informacion de los nombres de los JPG (fotos) que contiene, y las copias de cada foto. Pero bueno, en principio sacando los nombres de los jpgs que contiene el fichero B00 me vendría muy bien

Os subo un fichero de pruebas, porque veo que me explico como el culo

Gracias
Archivos Adjuntos
Tipo de Archivo: zip 250.zip (940 Bytes, 15 visitas)
Responder Con Cita
  #9  
Antiguo 31-05-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cool Entonces...

Bueno en ESE caso te dejo mi misma funcion un poco modificada:

Código Delphi [-]
function GetCardinal(var Buffer): Cardinal;
asm
 mov eax, [eax]
end;
 
const CrLf: Word = $0A0D;
var hFile, Index, Size, Count, Dummy: Cardinal; lpBuffer: PChar;
begin
 hFile := CreateFile('c:\250.b00', GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
 lpBuffer := MapViewOfFile(CreateFileMapping(hFile, nil, PAGE_READONLY, 0, 0, nil), FILE_MAP_READ, 0, 0, 0);
 Size := GetFileSize(hFile, nil);
 CloseHandle(hFile);
 hFile := CreateFile('c:\FileNames.txt', GENERIC_WRITE, 0, nil, CREATE_ALWAYS, 0, 0);
 Index := 0;
 while Index < Size do
  begin
   if GetCardinal(lpBuffer[Index]) = $67706A2E then // '.jpg'
    begin
     Count := 0;
     while lpBuffer[Index - Count - 1] in ['a'..'z', 'A'..'Z', '0'..'9'] do Inc(Count);
     WriteFile(hFile, lpBuffer[Index - Count], Count + 4, Dummy, nil);
     WriteFile(hFile, CrLf, 2, Dummy, nil);
     Inc(Index, 4);
    end
   else
    Inc(Index);
  end;
 CloseHandle(hFile);
end;

Si no te saca todos los nombres es porque hay algunos Unicode, en ese caso nos comentas!

Suerte & Saludos!
Responder Con Cita
  #10  
Antiguo 31-05-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cool De nada

Es un placer ayudarte amigo, mediante evolucione tu sistema y necesitas ayuda nos escribes un post cuando lo necesites, pero procura cuidar tu lexico ok? no estoy muy de acuerdo con la palabrilla que acabo de leer pues no es muy comun en los foros.

Cita:
Empezado por PTW
...Os subo un fichero de pruebas, porque veo que me explico como el !$"%
Un saludo.
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
Pasar ficheros de Theos a otro Formato Triton Varios 4 30-10-2007 23:03:33
ficheros binarios e imagenes sapi Varios 2 03-10-2006 16:50:34
Correo Web y Ficheros de Texto. marcoszorrilla Varios 29 06-09-2006 22:51:55
Leer enteros de 32-bits en ficheros binarios elcaracas C++ Builder 2 08-04-2005 21:46:54
Ficheros binarios deimonio Varios 2 29-12-2003 13:38:47


La franja horaria es GMT +2. Ahora son las 18:51:45.


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