FoxPro/Visual FoxPro - Problemas con STR en algunas variables

   
Vista:

Problemas con STR en algunas variables

Publicado por Alberto (4 intervenciones) el 25/10/2012 03:44:45
Quiero corer una operacion matematica para poder abrir un archive en relacion a los valores de "m.manzana" y "m.numsolar" pero no me permite me dice que no ha encontrado "RUTA"
sin embargo cuando lo corro con "m.folio" corre perfectamente y genera el numero correcto.

PUBLIC m.fecha, m.folio, m.nom, m.diasp, wimpre, cwfecontrato
PUBLIC m.paterno, m.materno, m.nombre, m.nacionali, m.dia, m.mes, m.año, m.lugar_n, m.domicilio
PUBLIC m.ocupacion, m.edocivil, m.telefono, m.fecha_nd, m.fecha_n
PUBLIC m.numsolar, m.manzana, m.superficie, m.importe, m.importec
PUBLIC m.enganche, m.enganchec, m.plazo, m.mensual, m.mensualc, m.fechapc
PUBLIC ameses(12)
STORE '' TO m.paterno, m.materno, m.nombre, m.nacionali, m.dia, m.mes, m.año, m.lugar_n, m.domicilio
STORE '' TO m.telefono, m.ocupacion, m.edocivil, m.fecha_n, m.fechapc
STORE '' TO m.numsolar, m.manzana, m.enganchec, m.mensualc, m.nom, cwfecontrato
STORE 0 TO m.superficie, m.importe, m.enganche, m.plazo, m.mensual, m.folio, m.importec, m.diasp



ruta = SYS(5)+SYS(2003)+'\doctos\contratos\'+'contrato'+SUBSTR(ALLTRIM(STR(10000+m.folio)), 2, 4)+'.pdf' (asi si trabaja)

ruta = SYS(5)+SYS(2003)+'\doctos\contratos\'+'contrato'+SUBSTR(ALLTRIM(STR(10000+m.manzana)), 2, 4)+'.pdf' (asi no trabaja)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problemas con STR en algunas variables

Publicado por Fidel (321 intervenciones) el 25/10/2012 14:15:10
1) Normalmente escribimos LTRIM(STR(nValor,nCaracteres,nDecimales), o sea LTRIM en lugar de ALLTRIM. Esto es por economía, nada más.
2) fijate que LTRIM(STR(nValor,2,4)) es impropio. Para que funcione correctamente en cuanto a resultado, la cantidad de caracteres debería ser, al menos nDecimales + 2 (que representan el entero y el punto decimal). O Sea, LTRIM(STR(nValor,6,4)) devuelve "0.0000".
El resultado de LTRIM(STR(nValor,2,4)) es que mostrará dos enteros decimales si el número es <=99 y si no, mostrará dos asteriscos.
Si m.folio es un entero, lo correcto es LTRIM(STR(m.folio))

3) LTRIM(STR(m.Manzana)) debería dar error porque m.manzana esta definido como Character.

4) Para evitar la confusión en la nomenclatura de variables, se recomienda
Primer letra de la izquierda, L=Local, P=PUBLIC R= PRIVATE
Segunda letra desde la izquierda= indica el tipo de dato n,i,c,l,d,t
En lugar de m.folio, sería PnFolio.

5) Reducir a una sola sentencia PUBLIC
PUBLIC m.fecha, m.folio, m.nom, m.diasp, wimpre, cwfecontrato ,;
m.paterno, m.materno, m.nombre, m.nacionali, m.dia, m.mes, m.año, m.lugar_n, ; m.domicilio ,;
m.ocupacion, m.edocivil, m.telefono, m.fecha_nd, m.fecha_n,;
m.numsolar, m.manzana, m.superficie, m.importe, m.importec ,;
m.enganche, m.enganchec, m.plazo, m.mensual, m.mensualc, m.fechapc

PUBLIC ameses(12) [Error de definición. Esto no crea un array sino una variable con un nombre que parece un array. Corresponde lo siguiente:
PUBLIC ARRAY aMeses(12)

Iguales consideraciones para STORE

6) Por qué todas estas definiciones PUBLIC?. Si tienes un tabla que tiene todos esos nombres, los puedes levantar fácilmente con
SCATTER MEMVAR
Si tu tabla tiene un campo que se llama folio, la variable creada por MEMVAR se llama m.folio

En la medida de lo posible utiliza variables locales. Genera rutinas (User procedure or function) para los elementos que pueden separarse.

Si lo que muestras ocurre dentro de un formulario y tienes un tabla con esos nombres de campo,
lo mejor es que en el LOAD del form lo pases a propiedades del form:
SCATTER NAME ThisForm ADDITIVE
Ahora tendrás:
Thisform.folio, Thisform.fecha, thisform.Manzana, etc... y estarán visibles hasta el Destroy del form inclusive.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problemas con STR en algunas variables

Publicado por santiago (377 intervenciones) el 25/10/2012 16:16:05
Hola, m.manzana es texto y m.folio es numerico

Suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problemas con STR en algunas variables

Publicado por Fidel (321 intervenciones) el 25/10/2012 20:45:47
No parece que tuviera que ser texto, porque estás poniendo (10000+m.manzana)
Si m.manzana es un alfanumérico, corresponde 10000 + Val(m.Manzana)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problemas con STR en algunas variables

Publicado por santiago (377 intervenciones) el 26/10/2012 00:06:14
STORE '' TO m.numsolar, m.manzana, m.enganchec, m.mensualc, m.nom, cwfecontrato
STORE 0 TO m.superficie, m.importe, m.enganche, m.plazo, m.mensual, m.folio, m.importec, m.diasp

m.manzana esta definido como texto (debería ser numérico)
m.folio esta definido como numérico
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problemas con STR en algunas variables

Publicado por Fidel (321 intervenciones) el 26/10/2012 00:41:43
Mira, para zanjar este tema (que leí un poco mal al principio), te paso una función que utilizo, porque por lo que veo, al tomar Substr(10040 ,2,4), estas creando un "0040", por ejemplo.

ruta = SYS(5)+SYS(2003)+'\doctos\contratos\'+'contrato'+Valcod(m.folio,4)+".pdf"
ruta = SYS(5)+SYS(2003)+'\doctos\contratos\'+'contrato'+Valcod(m.manzana,4)+".pdf"
Valcod admite tanto alfanumérico como numérico.
Si m.Manzana="47"
Valcod(m.Manzana,4) será "0047"

*************************************
FUNCTION VALCOD(nValor,NSPACE,cCHAR)
*************************************
* a Partir de un valor nValor, devuelve un String,
* rellenando con cChar a la izquierda.
* Por ejemplo Valcod(15,5,"0") devuelve "00015"
* cChar es un Valor "0" si no se define.
local Extrae, cVarVal
cChar=iif(Vartype(cChar)#"C","0",cChar)
cVarVal=Vartype(nValor)
if !cVarVal$'NC'
RETURN nValor
endif
Extrae=iif(cVarVal="N",ALLTRIM(STR(nValor)),;
Alltrim(str(Val(nValor))) )
RETURN REPLI(cCHAR,Max(0,NSPACE-len(extrae)) )+EXTRAE
ENDFUNC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problemas con STR en algunas variables

Publicado por Juan Manuel Cruz juanmcruz@hotmail.com (508 intervenciones) el 30/10/2012 12:35:14
Un apunte: Para convertir un valor numérico 15 a una cadena justificada a ceros "00015" hubiese bastado con:

cChar= transform( 15, "@L 99999")

Y te ahorras programar toda esa función "VALCOD()"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problemas con STR en algunas variables

Publicado por Juan Manuel Cruz juanmcruz@hotmail.com (508 intervenciones) el 30/10/2012 12:41:06
O mejor, si quieres que la función te convierta tanto texto como números, en una cadena justificado a ceros:

dCar= 15
cChar= transform( IIF( TYPE("dcar")="N",dcar,VAL(dcar)), "@L 99999")

**** cChar será: 00015

dCar= "15"
cChar= transform( IIF( TYPE("dcar")="N",dcar,VAL(dcar)), "@L 99999")

**** cChar será: 00015
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar