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 08-04-2011
kdemia kdemia is offline
Miembro
 
Registrado: may 2010
Posts: 109
Poder: 14
kdemia Va por buen camino
Exclamation Que hago mal? Por favor

que tal gente, tengo una duda y voy a intentar hacerla lo mas entendible y corta posible:
Si tengo el siguiente codigo
Código Delphi [-]
{Instrucciones}
procedure Ejemplo;
var
  Variable: Integer;
  Archivo: File of Integer;
begin
  AssignFile(Archivo, "C:\Ejemplo.algo");
  Reset(Archivo);
  Read(Archivo, Variable);
  CloseFile(Archivo);
end;
{Instrucciones}
Delphi se va a encargar que el numero "Variable" que se va a leer va a estar entre -2147483648 y 2147483647 (que es el rango del integer), yo lo que necesito es acotar esos valores y hacer que el numero que se lea sea este entre -x y x, yo lo que pense es un subrango como por ejemplo:
Código Delphi [-]
{Intrucciones}
Type
  SubRango = -100..99;
{Instrucciones}
procedure Ejemplo;
var
  Variable: SubRango;
  Archivo: SubRango;
begin
  AssignFile(Archivo, "C:\Ejemplo.algo");
  Reset(Archivo);
  Read(Archivo, Variable);
  CloseFile(Archivo);
end;
{Instrucciones}
Pero no funciona, lee un numero cualquiera como si estuviera leyendo un integer.. que de hecho es un integer pero acotado... si alguien me ayuda le debo 1000.. un abrazo a todos
Responder Con Cita
  #2  
Antiguo 08-04-2011
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Bueno amigo,

Pero que esperas que pase si el numero no esta en el rango?, que lo omita?, que muestre un mensaje de error?

En tu caso veo que tienes un archivo con un solo dato... si el dato no es correcto... explotaría el programa? no controlas el error de lectura...

Por que no haces la facil?

Código Delphi [-]
Function LeerNumero: Integer;
var
  Variable: Integer;
  Archivo: File of Integer;
begin
  AssignFile(Archivo, "C:\Ejemplo.algo");
  Reset(Archivo);
  Read(Archivo, Variable);
  CloseFile(Archivo);

  if (variable < CotaInferior) or (Variable > Cotasuperior) then
     Result:= ValorDefault;
  else
    result.=Variable;
end;

Bueno, la verdad no se como te este funcionando la aplicacion, pero al hacer esta prueba:

Código Delphi [-]
type
  SubRango = -100..99;

procedure Ejemplo;
var
  Variable: SubRango;
begin
  Variable:= 1000;
end;

sale un error de compilacion que dice que el numero esta fuera de rango...



Un salduo,
Responder Con Cita
  #3  
Antiguo 08-04-2011
kdemia kdemia is offline
Miembro
 
Registrado: may 2010
Posts: 109
Poder: 14
kdemia Va por buen camino
claro, no, como me lo imagine, no se entendio... cuando delphi lee un numero con el read lee a un integer y delphi lee de tal manera que pueda leer todo el archivo siempre leyendo en una variable con un rango definido.. yo puedo hacer esto:
Código Delphi [-]
{tenemos una variable "archivo: file of integer" y otra "variable: integer"}
while not EOF(Archivo) do
  read(archivo, variable);
y ahi voy a leer todo el archivo como un integer donde cada integer va a estar en un rango -x <= variable < x (si reemplazas x por 2147483648, efectivamente es el rango de los integers y variable va a estar entre esos dos numeros).. como tambien puedo hacer lo siguiente:
Código Delphi [-]
{tenemos una variable "archivo: file of int64" y otra "variable: int64"}
while not EOF(Archivo) do
  read(archivo, variable);
y voy a hacer lo mismo que el codigo anterior, solo que esta vez voy a leer el archivo como un int64 y por lo tanto cada variable va a ser de otro rango.. tmb puedo hacer lo mismo con la variable de tipo byte(0..255), word(0..65535), smallint, shortint, longword asi como tambien string y char... porque no? pero yo lo que quiero es que lo lea de cierta forma que se adapte a otro rango.. la cosa es como declaro ese rango?

Última edición por kdemia fecha: 08-04-2011 a las 07:09:08.
Responder Con Cita
  #4  
Antiguo 08-04-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
disculpa la pregunta
pero para que utilizarias el rango?
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #5  
Antiguo 08-04-2011
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
hola kdemia,

¿Te esta saliendo algún error al leer?, ¿estas verificando el dato que esta cargando?, no tengo un Delphi a la mano para hacer el ejercio, asi que veo que el problema puede estar en la estrutura del archivo y la forma como lo lees, pues como te dije, la declaración que haces está bien, y el compilador "brinca" si ingresas un numero fuera de rango.... me explico:


1) cuando haces read(archivo, variable), Delphi lee un dato sin saltar de linea... asi que si tu archivo tiene una estrutura como:

1234545676575487847568967806879'089809780'9780

y le dices lea un entero... el compilador puede estar tomando el dato que considere que aplica... como 123... la siguiente lectura, será 45, y la siguiente 56...

Cuando lees el numero, estas controlando de alguna manera lo que esta cargando la variable???

intenta por ejemplo:


Código Delphi [-]
while not EOF(Archivo) do
  begin
  read(archivo, variable);
  showmessage(IntTostr(variable));
end; //while

y nos cuentas que pasa...

Ahora, vuelvo y te repito la pregunta...¿qué esperas que pase si el dato no está en el rango?, por que el fragmento de codigo que nos muestras ocasionará un error que aborte el procedimeinto ....

Deberías darnos mas luces sobre lo que quieres hacer y como lo estas haciendo pues veo que no nos entregas toda la información...

Intenta hacerlo del modo facil, antes de encerrarte en está unica solucion que quieres...

Código Delphi [-]
while not EOF(Archivo) do
  begin
  read(archivo, variable);
  if (variable >=-99) and (variable <= 100) then
    procesardato(variable);
 end; //while



Un salduo,
Responder Con Cita
  #6  
Antiguo 08-04-2011
kdemia kdemia is offline
Miembro
 
Registrado: may 2010
Posts: 109
Poder: 14
kdemia Va por buen camino
les cuento y les respondo a los dos citando un ejemplo...yo si quiero representar un archivo cualquiera sea como codigo hexa.. lo que deberia hacer es leer el archivo como byte asi el rango estaria entre 0 y 255 y lo puedo representar como 0 o como FF con la funcion IntToHex se entiende? yo lo que quiero q en vez de q este entre 0 y 255, este entre 0 y 99, y lo que no quiero es perder ningun dato.. asi se puede hacer a la inversa es decir ir escribiendo el archivo con los datos que lei, y este siga siendo el mismo archivo..
Responder Con Cita
  #7  
Antiguo 08-04-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
mmmm no se
quiza mi cafe no esta muy cargado o la hierba no esta buena.. pero no te entendi

quieres leer el archivo para que?
transformar lo que lees en Hexa ?
que contiene el archivo? Texto? datos binarios? chinitos? (como les deciamos a lo que se ve en el ejecutable)

quieres leer solo una porcion del archivo? o ir leyendo en bloque?
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #8  
Antiguo 08-04-2011
kdemia kdemia is offline
Miembro
 
Registrado: may 2010
Posts: 109
Poder: 14
kdemia Va por buen camino
ecfisa me dijo esto.. quiza entiendan como el lo explica.
Cita:
Empezado por ecfisa
Hola kdemia.

Estuve leyendo tu post y creo entender perfectamente lo que buscas.

Es cambiar el formato interno de los datos, creando así no sólo un nuevo tipo de variable, sino un nuevo tipo cuyos rangos sean arbitrariamente definidos por vos. Es decir un nuevo tipo no contemplado en los tipos básicos de Delphi.

Tendría que investigarlo más. Hasta donde sé, diría que que no es posible... pero no puedo afirmarlo.

Un saludo.
Responder Con Cita
  #9  
Antiguo 08-04-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Cita:
Empezado por kdemia Ver Mensaje
ecfisa me dijo esto.. quiza entiendan como el lo explica.

no veo el post colocado...
pero la pregunta es...
pretende definir "eso" leyendo informacion del archivo?
seria bueno saber que contiene el archivo para tener una mejor idea
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #10  
Antiguo 08-04-2011
kdemia kdemia is offline
Miembro
 
Registrado: may 2010
Posts: 109
Poder: 14
kdemia Va por buen camino
a ver ahi si lo leen :P

Originally Posted by ecfisa
Hola kdemia.

Estuve leyendo tu post y creo entender perfectamente lo que buscas.

Es cambiar el formato interno de los datos, creando así no sólo un nuevo tipo de variable, sino un nuevo tipo cuyos rangos sean arbitrariamente definidos por vos. Es decir un nuevo tipo no contemplado en los tipos básicos de Delphi.

Tendría que investigarlo más. Hasta donde sé, diría que que no es posible... pero no puedo afirmarlo.

Un saludo.

el archivo es un archivo cualquiera.. contiene binarios..
Responder Con Cita
  #11  
Antiguo 08-04-2011
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Ok, veo que la respuesta de ecfisa (por el medio que haya sido), confirma lo que te decía:

Cita:
..asi que veo que el problema puede estar en la estrutura del archivo y la forma como lo lees..
La respuesta de ecfisa es clara, la pregunta ahora es...¿te funciona asi?

debes tener en cuenta que si defines una archivo tipado, como te lo propone ecfisa (File of...) no es solo cuestion de abrir un block de notas y digitar caracteres... el archivo debe ser grabado desde un procedimeinto delphi y recuperado de la misma forma....

Un salduo,
Responder Con Cita
  #12  
Antiguo 08-04-2011
kdemia kdemia is offline
Miembro
 
Registrado: may 2010
Posts: 109
Poder: 14
kdemia Va por buen camino
ecfisa no me propone ninguna solucion, explica mas claramente mi problema y me dice que el cree que no se puede.. el medio en el que me lo dijo es mensaje privado y la parte de:
"el archivo es un archivo cualquiera.. contiene binarios.." lo puse yo contestandole a oscarac, probe tu solucion gatosoft, y funcionria solo para la lectura pero si lo quiero volver a escribir a los datos esos en un archivo no volveria a ser el mismo archivo porque perderia datos..
Responder Con Cita
  #13  
Antiguo 08-04-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
disculpa que siga preguntando pero...
cual es la funcion de leerlo y escribirlo

que haras con los binarios (0,1) o chinitos? que leas?
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #14  
Antiguo 08-04-2011
kdemia kdemia is offline
Miembro
 
Registrado: may 2010
Posts: 109
Poder: 14
kdemia Va por buen camino
guardar el numero cmo otro formato.. raro XD no igual me parece q no se puede hacer lo q yo quiero.. muchas gracias igual a todos, lo tendre q resolver de otra manera.. un abrazo a todos y gracias por su preocupacion
Responder Con Cita
  #15  
Antiguo 08-04-2011
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Cita:
ecfisa no me propone ninguna solucion
Amigo kdemia, ecfisa si te propone una solución, lo que pasa es que no te entrega el código

Cita:
Es cambiar el formato interno de los datos, creando así no sólo un nuevo tipo de variable, sino un nuevo tipo cuyos rangos sean arbitrariamente definidos por vos. Es decir un nuevo tipo no contemplado en los tipos básicos de Delphi.
Lo que plantea Ecfisa es mas o menos lo que has venido haciendo:

Código Delphi [-]
Type
TMyTipoDeDato = -99..100;
...
var
Variable: MyTipoDeDato;
Archivo: File Of TMyTipoDeDato; 
...
Write(Archivo, Variable); //tu lo generas
...
Read(Archivo, Variable); // tu lo lees

Ahora, a medida que se avanza en este hilo vas soltando mas información... y ahora creo entender que quieres leer un archivo cualquiera... posiblemente una imagen?, un archivo de texto?...

Una pregunta adicional... el archivo (cualquiera) lo generas tu?, tienes control total sobre la forma como se crea? o es solo un archivo que recibes? (PDF, JPG...)

Si no tiens control sobre eso, no puedes asumir el formato en el que está... es decir, si te dicen que es un archivo que almacena datos tipo Byte, o hexadecimal... no debes asiumir que es equivalente a leer un tipo de dato HEX o Byte de delphi...

Esta lectura debes hacerla con rutinas especiales de lectura de bloques o streams... (no tengo a la mano documentación pero podrias investigar...aqui mismo en el club)... Esto se utiliza en general para cualquier tipo de archivo BINARIO...

Nos cuentas como te va...

--agregado--
ecfisa, como moderador, no deberias responder hilos en privado... ¿no te parece?
Responder Con Cita
  #16  
Antiguo 08-04-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
sigo insistiendo en que deberias decirnos que cosa contiene el archivo
y concuerdo con gatosoft, el tema de responder en privado.. porque hace que los demas nos "perdamos" un poco
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #17  
Antiguo 08-04-2011
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Cita:
Empezado por kdemia Ver Mensaje
guardar el numero cmo otro formato.. raro XD no igual me parece q no se puede hacer lo q yo quiero.. muchas gracias igual a todos, lo tendre q resolver de otra manera.. un abrazo a todos y gracias por su preocupacion
Ok, amigo, finalmente lo único que te pedia oscarac es que nos contextualizaras, mejor sobre tu problema... para la proxima si quieres, esperariamos algo como:

Estoy haciendo una aplicación que lee archivos .ZIP y los transforma en archivos .RAR. Como se que los primeros estan en un formato hexadecimal que ocupa mas, los queiro transformar a uno binario que ocupa menos (esto es mentira, solo estoy inventando el problema).

Lo que hago es abrir el archivo y recorrelo con una variable Hexadecimal (FFGGHH), luego transformo ese numero a binario (1010101) y lo guardo... pero veo que se pierde información...

Aqui un fragmento del codigo... dlksadñlfgsñadj

y las pruebas de escritorio que heh hecho me dicen que cuando leo el numero hexadecimal, no me trae FFGGHH sino algo con caracteres ASCII ....

En fin... es cuestion de contextualizar un poco mas el problema y no asumir que la solucion que piensas es la única que se puede... así te podremos ofrecer alternativas.

Un salduo,
Responder Con Cita
  #18  
Antiguo 08-04-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
mm quiza esta finalizada esta pregunta
pero igual me quede con la duda
cual es el objeto de leer los datos y querer crear un nuevo tipo de datos?

he visto peliculas en donde de una imagen (foto) se pueden extraer mensajes.. quiza nuestro amigo quiere hacer algo como eso....

no podre dormir ahora pensando en esto

saludos
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #19  
Antiguo 08-04-2011
kdemia kdemia is offline
Miembro
 
Registrado: may 2010
Posts: 109
Poder: 14
kdemia Va por buen camino
ecfisa me contesto en mp porque yo le pregunte por mp.. no es que me lo propuso asi de la nada.. segundo yo leo un archivo cuya extension no importa ni tampoco su nombre.. lo abro con un opendialog.. eso uqe propones gatasoft es lo que puse en mi ejemplo.. y no funciona.. es dificil de explicar y entender :P
Responder Con Cita
  #20  
Antiguo 09-04-2011
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 amigos.

Recién entro despues de un día de una terrible descompostura...

Tal como explica kdemia, el texto es una respuesta a un mensaje privado.
No duplique el texto en un post por que no aporta ninguna solución; de haber tenido una por supuesto mi respuesta hubiera estado en este hilo.

Por lo que entiendo, kdemia quiere crear o modificar la precisión con que es almacenado un tipo, pero si esto es posible al menos yo, no sé cómo.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 09-04-2011 a las 05:13:26.
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
Como lo hago¿? ayuda por favor!!! cacopelao Internet 1 06-08-2008 08:44:18
Que hago mal??? ZayDun Varios 3 06-06-2007 14:53:28
que hago mal? jvalles Gráficos 2 19-07-2005 14:45:06
Como las hago? jam888 Firebird e Interbase 7 06-05-2005 22:45:41


La franja horaria es GMT +2. Ahora son las 20:06:54.


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