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 01-03-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
El tamaño de un Fichero

Hola Amigos.

Existe alguna forma de que Delphi al cargar un file nos permita saber el size del mismo?.El formato de este file es un (intelHex.)


Un Saludo.
Responder Con Cita
  #2  
Antiguo 01-03-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Hum... ¿estamos hablando de averiguar el tamaño de un archivo?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 02-03-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Hola dec.

Me temo que es mas complicado que eso.No es en si el tamaño del file, en realidad es el size de los bytes que este file contiene y que son data a programar.
Para explicarme mejor intelhex. este enlace nos deja ver mejor el formato de este tipo de files.En la penultima linea esta la informacion que tendria que manipular.En el primer hex de esta linea esta la cantidad de bytes de data que contiene y en los dos bytes que le siguen esta el address donde esta data comenzara.Si el primer hex de esa linea es 03 entonces sabremos que el address final donde terminara el size del file de programacion es ese address mas dos espacios mas . jajajajajajajaja algo complicado.
La idea del porque quiero saber el size de este tipo de file es para saber de ante mano antes de mandar un file a un chip si este tiene la capacidad de cargarlo, antes de dar la orden de hacerlo.

Un Saludo.
Responder Con Cita
  #4  
Antiguo 02-03-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Hola Amigos.

Bueno aportando mas informacion:

:080743004349474F4C2D694862

En esa linea de codigo intelhex (la penultima para ser mas especifico) Encontramos que el primer hex es 08 esto nos deja saber que son 8 los hex de data en la misma.Los hex 0743 nos dejan saber que estos 8 hex de data comensaran en el address 0743h donde el primero de ellos estara en esa address y los restantes 7 en adelante.Entonces tendriamos que el address final de ese file seria 074Ah. Teniendo en cuenta que 07FFh son 2 kbytes, entonces podemos decir que este file si cabe dentro de un chip que tengo 2 kbytes de memoria.Ya que 074A < 07FF.
La clave de lo que trato de encontrar estaria entonces como digo en la penultima linea de este tipo de files y para ser mas exactos en sus primeros tres bytes.

Un Saludo.
Responder Con Cita
  #5  
Antiguo 02-03-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Veamos si me sale...

Código Delphi [-]
function IntelHexFileSize(FileName: string): integer;
var
 F: File of byte;
 HexCount, A1, A2: Byte;
 Adress: Word;
begin
AssignFile(FileName, F);
Reset(F);
Read(F, HexCount);
Read(F, A1);
Read(F, A2);
CloseFile(F);
Adress:=HexToInt(IntToHex(A1,2)+IntToHex(A2,2));
Result:=Adress+HexCount;
end;

Necestirás la función HexToInt: Trucomanía

Está hecho así, de cabeza, no sé si funcionará bien... de todas formas, ¿no te vale un FileSize de un archivo de tipo Byte?


Salu2.
Responder Con Cita
  #6  
Antiguo 02-03-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Hola ixMike.

Gracias por la ayuda que me puedas dar en este hilo.Pondre un file intelhex corto para ver si me puedes ayudar a encontrar una forma de poder contar los bytes de data que en realidad tiene.

[codigo]
:020000000149B4
:0100030032CA
:01000B0032C2
:0100130032BA
:01001B0032B2
:0100230032AA
:1800250075880075890075D00075A800227F000FEFB4FFFB227E007DFC
:14003D00020E1132EE70FA1DED70F6221125B290113A014B63
:00000001FF
[/codigo]

Este file intelhex tiene 9 lineas pero en realidad solo 8 tienen bytes de data a programar en un micro.
Si vemos el primer hex de cada linea despues del semicolon ( : ) y lo pasamos a decimal nos dara los bytes de data en esa linea y asi los podemos sumar con los de la linea dos,tres, etc. En este caso en la primera linea hay solo dos bytes de data a programar ya que es :02 y en la segunda solo uno :01

Mi pregunta se puede hacer una funcion en Delphi que solo cuente en cada linea despues del semicolon el hex que le sigue y sumarlo al siguiente de la siguiente linea ?

Un Saludo.
Responder Con Cita
  #7  
Antiguo 02-03-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Pero, ¿cómo son estos archivos? ¿Archivos de texto, tal cual los expones? ¿Series de bytes? Y si es así, ¿cómo se estructuran?

Poderse se puede, sólo hay saber cómo.


Por cierto, semicolon es puntocoma ";". Los ":" se dice.... bueno, no sé cómo se dice dos puntos
Responder Con Cita
  #8  
Antiguo 02-03-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Cita:
Empezado por ixMike Ver Mensaje
Los ":" se dice.... bueno, no sé cómo se dice dos puntos
se dice "dos puntos". Porque hablamos español, si started to hablar half en inglés mitad en spanish, pues vaya foro de frikies ¿no?

PD: yo tampoco sé como se dice en inglés los dos puntos

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #9  
Antiguo 02-03-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Un file intelhex es asi como lo estas mirando en mi comentario anterior.Estos files se usan para programar chips como los eproms y los microcontroladores.
Para entender este formato aqui el enlace.
Son dos puntos los que comienzan cada linea del mismo : uno de estos files puede ser de 5 kbytes pero la data real que entrara a un micro de estos 5 kbytes pueden ser 2 kbytes.El resto son bytes de address, intruciones, etc.
Este tipo de file no es complicado una vez que ya uno lo puede entender.Mi problema no es con este codigo, mi problema es Delphi que no lo domino.Yo mirando la penultima linea de un file intelhex en unos segundos te digo cuantos bytes de data contiene este file.
El problema radica en que quiero que una rutina en Delphi lo pueda hacer( contar los bytes de data reales que contiene un file determinado.)

Un Saludo.
Responder Con Cita
  #10  
Antiguo 02-03-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Entonces, a ver si lo he entendido.

Son archivos de texto. Y en este ejemplo:

Cita:
:020000000149B4
:0100030032CA
:01000B0032C2
:0100130032BA
:01001B0032B2
:0100230032AA
:1800250075880075890075D00075A800227F000FEFB4FFFB227E007DFC
:14003D00020E1132EE70FA1DED70F6221125B290113A014B63
el archivo resultante para el chip ocuparía 2+1+1+1+1+1+24+20 = 51 bytes, ¿no?
Responder Con Cita
  #11  
Antiguo 02-03-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Cita:
Empezado por ixMike Ver Mensaje
Entonces, a ver si lo he entendido.

Son archivos de texto. Y en este ejemplo:



el archivo resultante para el chip ocuparía 2+1+1+1+1+1+24+20 = 51 bytes, ¿no?
Si eso es correcto y esos 51 bytes resultante son los que al final conformaran el file que terminara dentro del micro. Por eso la importancia de conocer su tamaño.

Un Saludo.
Responder Con Cita
  #12  
Antiguo 02-03-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Vale. Entonces, suponiendo que esa última línea :00000001FF no afecta (¿siempre es :00....?) entonces creo que este código te sirve:

Código Delphi [-]
Function IntelHexFinalFileSize(const FileName: String): Integer;
var
 S: TStrings;
 n, FinalSize: Integer;
begin
 FinalSize:=0;
 S:=TStringList.Create;
 S.LoadFromFile(FileName);
 For n:=0 to S.Count-1 do Inc(FinalSize, HexToInt(Copy(S[n],2,2)));
 S.Free;
 Result:=FinalSize;
end;


Lo único que hace es recorrer todas las líneas del fichero, sumando los valores iniciales de cada línea.

¿Fácil, no? ¿Qué es lo que no sabías hacer? ¿Leer el archivo de texto? ¿Obtener los valores de cada línea? ¿Sumar valores hexadecimales?...


Salu2
Responder Con Cita
  #13  
Antiguo 02-03-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Hola ixMike.

Cita:
¿Qué es lo que no sabías hacer? ¿Leer el archivo de texto? ¿Obtener los valores de cada línea?
Mas bien que es lo que no se todavia. jajajajajaja en esto de Delphi estoy a gatas todavia.
Con ese codigo tengo material de estudio para un rato.

Un Saludo y un millon de gracias.
Responder Con Cita
  #14  
Antiguo 02-03-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Código Delphi [-]
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Label1: TLabel;
    OpenDialog1: TOpenDialog;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
 function HextoInt(HexStr: String):integer;
const Hex : array['A'..'F'] of integer = (10,11,12,13,14,15);
var
    i   : integer;
begin
  Result:=0;
  for i := 1 to Length(HexStr) do
    if HexStr[i] < 'A' then Result := Result * 16 + Ord(HexStr[i]) - 48
                       else Result := Result * 16 + Hex[HexStr[i]];
end;
Function IntelHexFinalFileSize(const FileName: String): Integer;
var
 S: TStrings;
 n, FinalSize: Integer;
begin
 FinalSize:=0;
 S:=TStringList.Create;
 S.LoadFromFile(FileName);
 For n:=0 to S.Count-1 do Inc(FinalSize, HexToInt(Copy(S[n],2,2)));
 S.Free;
 Result:=FinalSize;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
  begin
  Label1.Caption:=OpenDialog1.FileName;
  Memo1.Lines.LoadFromFile(Label1.Caption);
  Label2.Caption:=IntToStr(IntelHexFinalFileSize(Label1.Caption));
end;
end;
end.

Gracias al amigo ixMike asunto resuelto.
Responder Con Cita
  #15  
Antiguo 02-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
He seguido el hilo y solo puedo decir, muy interesante aunque no se para que sirve.
Saludos
Responder Con Cita
  #16  
Antiguo 02-03-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Hola Caral.

La idea es poder contar los bytes de programa (bytes que nadara a un micro) que contiene un file intelhex determinado.Ya que este es el tipo de file que se usa para programar un micro usando una PC.El file en si es mucho mas grande de los bytes que al final estaran dentro del chip.En este tipo de formato estan algunas instrucines y las address a donde estaran apuntando estos bytes de data.La importancia de saber cual es el tamaño real que iria a parar dentro del chip , es para determinar si el chip tiene memoria para el tamaño del file.
Por ejemplo el AT89C2051 solo tiene 2 kbytes de memoria y solo se podran mandar files que contengan 2 kbytes o menos.
Ahora yo con esa informacion comparo la memoria del chip que usare y el tamaño del file si esta dentro de los parametros todo continua normal de ser mayor entonces un Showmessage(' File es mas grande que la memoria');
algo asi.

Espero que ya este mas claro.

Un Saludo.
Responder Con Cita
  #17  
Antiguo 02-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Gracias por la explicación, trato de leer los hilos en los que participas ya que se que van relacionados con los chips y esas cosas.
Me pregunto?.
Como haces para leer el chip, lo pones en una usb, en otro ordenador?, no me queda claro.
No te preocupes en explicarme mucho, ya se que no le llegare, es solo curiosidad.
Saludos
Responder Con Cita
  #18  
Antiguo 02-03-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
un gusto en saludarte amigo Jose, pero has perdido tu tiempo explicando eso a Caral, el ya lo sabia, solo pregunto para aumentar un post y ver si desvirtuaba el hilo , mira que por eso tiene mas de 3K en su cuenta
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #19  
Antiguo 02-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Mira que eres camorrero.
No me hagas quedar mal, sabes que de esto no se nada y la verdad es muy interesante.
Saludos
Responder Con Cita
  #20  
Antiguo 02-03-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Ta bien, me retracto de mi comentario anterior, mira que seria interesante aprendieras un poco y automatizaras tus procesos en produccion, seria todo un exito.
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
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
Fichero Ini nelem Varios 2 03-01-2008 16:05:40
Tamaño de los ejecutables de Lazarus JULIPO Lazarus, FreePascal, Kylix, etc. 15 07-11-2007 17:41:36
Tamaño de mi ejecutable Ricardo Alfredo Varios 13 07-02-2007 20:47:14
recorrer listbox para modificar tamaño del form DM2005 Varios 1 15-08-2006 14:11:10
Obtener un fichero adjunto a un nodo de un fichero XML muntasil Internet 0 18-07-2006 12:57:57


La franja horaria es GMT +2. Ahora son las 13:50:48.


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