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: 22
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: 22
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
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
  #8  
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
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 23:43:33.


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