Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problemas con "COPY" (https://www.clubdelphi.com/foros/showthread.php?t=31639)

Chalo78 12-05-2006 21:50:18

Problemas con "COPY"
 
Hola Amigos del Foro,
Estoy desarrollando un programa que captura los datos de latitud y longitud (float) desde un GPS, datos que posteriormente los compara con una referencia que entrega el usuario. Si lo anterior es válido, en una carta digital que está georeferenciada, se genera un punto rojo que marca la posición del usuario dentro de dicha carta. Hasta ahí todo va bien, el problema lo tengo al tratar de editar el valor que me entrega el GPS para que sea un entero. Es decir, si la latitud en segundos es 35,43, necesito solo el 35 y si la longitud es 0,42, solo necesito el 0. Estos valores pueden variar en su longitud, ya que si bien el GPS solo entrega valores con 2 decimales significativos, los enteros pueden ser 1 o 2 como máximo (ejemplo: 59, 23 segundos ó en algunos casos 02,37). Luego de buscar en el foro, encontré funciones como trunc, RoundTo y otras, pero opté por usar “Copy”, de la forma en que se aprecia en el código de abajo, ya que las funciones me causaban problemas y mis conocimientos de Delphi son muy básicos. El programa compila bien y se genera el ejecutable, pero llegado el momento de realizar el redondeo de las cifras me arroja el siguiente error: “Raised Exception Class EConvert Error with message ‘ ‘’is not a valid Integer Value’. Process stopped. Use Step or Run to continue.” Según lo que entiendo, las comilla que encierran al separador (‘,’) me están causando el problema, pero lo cierto es que no sé como solucionarlo.
Les adjunto el código para que quede más claro y a ver si alguien más avezado me puede ayudar con este problema que ya me saca canas verdes. De antemano muchas gracias a quienes lean este mensaje.
Código Delphi [-]
procedure TForm1.Timer1Timer(Sender: TObject);
 var
    strGPSMinL : String;
    strMinL : String;
    strMinG : String;
    strGPSMinG : String;
    intMinLat1 : Integer;
    intMinLong1 : Integer;
    intMinLat2 : Integer;
    intMinLong2 : Integer;
    intMinL : Integer;
    intMinG : Integer;
    pxl : Integer;
    pxg : Integer;
    begin
     strSecLat := FloatToStr(ZylGPSReceiver.GetLatitudeSecond); //Transformación de datos de Segundos de Latitud a String
     strSecLong := FloatToStr(ZylGPSReceiver.GetLongitudeSecond);//Transformación de datos de Segundos de Longitud a String
     strGPSMinL := FloatToStr(ZylGPSReceiver.GetLatitudeMinute); //Transformación de datos de Minutos de Latitud a String
     strGPSMinG := FloatToStr(ZylGPSReceiver.GetLongitudeMinute);//Transformación de datos de Segundos de Longitud a String
     strMinL := copy (strGPSMinL,0,2); //Datos de minutos de latitud con dos decimales significativos
     strMinG := copy (strGPSMinG,0,2); //Datos de minutos de longitud con dos decimales significativos
     Edit3.Text := strMinL;//visualización de los datos de minutos de latitud con dos decimales significativos
     Edit4.Text := strMinG;//visualización de los datos de minutos de longitud con dos decimales significativos
     intMinL := StrToInt(strMinL);//Transformación de de variable anterior a Integer
     intMinG := StrtoInt(strMinG);//Transformación de de variable anterior a Integer
     intMinLat1 := StrToInt(txtminlat1.Text);//Referencia geográfica de una carta digital para comparación con datos obtenidos del GPS
     intMinLong1 := StrToInt(txtminlong1.Text);//Referencia geográfica de una carta digital para comparación con datos obtenidos del GPS
     intMinLat2 := StrToInt(txtminlat2.Text);//Referencia geográfica de una carta digital para comparación con datos obtenidos del GPS
     intMinLong2 := StrToInt(txtminlong2.Text);//Referencia geográfica de una carta digital para comparación con datos obtenidos del GPS
     pos2 := (Copy(strSecLat,1,(Pos(',',strSecLat))-1));//***Rescate de la parte entera de la variable string "strSecLat"***  AQUÍ ESTÁ EL PROBLEMA
     pos1 := (Copy(strSecLong,1,(Pos(',',strSecLong))-1));//***Rescate de la parte entera de la variable string "strSecLat"***AQUÍ ESTÁ EL PROBLEMA
     Edit1.Text:=pos1 //visualización de la variable pos1=posición 1
     Edit2.Text := pos2//visualización de la variable pos2=posición 2
     mensajedeerror.Caption := ' ';//asigna un espacio en blanco en caso de no existir un error en la comparación de la línea siguiente
     if (intMinL <= intMinLat1) and (intMinG <= intMinLong1) and (intMinL <= intMinLat2) and (intMinG <= intMinLong2) then
      Begin
      if  (pos1 = '0') and (intMinL = intMinLat2) then
      pxl := 595;
      ... etc

luisgutierrezb 13-05-2006 19:56:44

a veces marca el delphi los errores una linea despues de lo que causo el problema, porque no pruebas en lugar de strtoint la funcion strtointdef donde si no es valido el lo que le mandes a convertir, te da un numero por default, tal vez en los edits no lo estes dando valores y al no darselos no te convierte a cero, te marca el error que mencionas, insisto, que como prueba uses la funcion strtointdef, solo para descartar algun caracter invalido en la conversion

Lepe 14-05-2006 08:47:16

Lo que ocurre es que no está cogiendo ningún número, es decir, la cadena vacía no es un entero válido.

strMinG := copy (strGPSMinG,0,2)

Para usar la orden copy debes empezar copiando en el índice 1, tú estas empezando en cero.

Para convertirlo, usa mejor tryStrtoInt, o bien StrToIntDef, así no tendrás fallos de conversión.

Personalmente usaría los Floats y despues usaría Trunc para coger la parte entera.

Ten en cuenta que delphi usa el punto como separador decimal así que una coma te dará errores.
- Puedes reemplazar la coma por punto usando StringReplace (delphi 6 o superior creo recordar)
- Puedes cambiar la variable SysUtils.DecimalSeparator para que funcione con la coma.

Saludos

Chalo78 15-05-2006 18:30:21

Chicos,
Gracias por la ayuda, voy a probar usando los consejos que me dan.
Saludos,
Chalo.


La franja horaria es GMT +2. Ahora son las 06:27:55.

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