Página 1 de 1

Erro Ao extrair Digitos

Enviado: 25 Mai 2010 17:44
por Samuk.exe
Ola...

Comecei a Programar Pouco tempo Intao desculpe qualquer ignorancia.

O negocio é o Seguinte: Eu precisava extrair os caracteres de determinadas posiçoes.

Ex. Se fosse " 13465 "
Queria extrair o Segundo caracter. Resposta --->" 3 "

Andei pesquisando e achei a função ValPos()

Intao eu Fiz..

Código: Selecionar todos

...
Procedure Click
Local a,b
        a := "12345678"
        b := ValPos( a , 2 )

...
Mais o "b " fica vazio... Ou Seja , Não da resposta...

Se alguem puder me ajudar

Abraços

Re: Erro Ao extrair Digitos

Enviado: 25 Mai 2010 18:15
por Toledo
Olá Amigo, seja bem-vindo ao fórum!

O seu exemplo funciona sim, compile este outro exemplo:

Código: Selecionar todos

Function Main()
Local a,b
a := "12345678"
b := ValPos( a , 2 )
? b
Return Nil
Mas acho que o problema deve ser por que você está definindo a variável "b" como Local. E toda variável Local só mantem seu valor dentro da função que a criou.

Abraços,

Re: Erro Ao extrair Digitos

Enviado: 25 Mai 2010 20:21
por Samuk.exe
Amigo .. Tbm não resolveu! Continua retornando um campo vazio.
Tah ai o programa completo... Pra vcs testarem.

Código: Selecionar todos

#include "minigui.ch"
Function main()

i=0;

              DEFINE WINDOW Form_1 ;
                AT 0,0 ;
                WIDTH 400 ;
                HEIGHT 300;
                TITLE 'EAN 13';
                MAIN;
                TOPMOST

                @  50 , 100 BUTTON Button_1;
                        CAPTION "Codigo de Barras";
                        ACTION CLick();
                        WIDTH 200;
                        HEIGHT 30;

          END WINDOW

          CENTER WINDOW Form_1

          ACTIVATE WINDOW Form_1

Return

Procedure Click


             a := InputBox (' Digite o Codigo de Barras', 'Codigo Ean' , 'Codigo',)                         
 	     b := ValPos ( a , 2 )  
             MsgInfo ( b )   

Return nil
O que vc falou d declarar o b como local, acho que não é. Pois msm sem declara Funfa!

Esse programa vai ser para calculo do digito verificador EAN... Se alguem já fez epuder ajudarrr...

Abraços

Re: Erro Ao extrair Digitos

Enviado: 25 Mai 2010 21:52
por Toledo
Realmente tem algum problema com a função ValPos(), então vamos usar a SUBSTR()...

Veja exemplo:

Código: Selecionar todos

Procedure Click
a := InputBox (' Digite o Codigo de Barras', 'Codigo Ean' , 'Codigo',)
b := Substr( a , 2, 1 ) 
MsgInfo ( b )   
Return nil
Sobre o dígito verificador do EAN13, veja:

https://pctoledo.org/forum/viewto ... 107#p21422

Abraços,

Re: Erro Ao extrair Digitos

Enviado: 26 Mai 2010 08:04
por Samuk.exe
Valeu Toledo...

Com o Substr funcionou Sim!

Abraços!

Re: Erro Ao extrair Digitos

Enviado: 27 Mai 2010 03:10
por rochinha
Amiguinhos,

Se o caso era retornar o valor contido na variavel B mesmo que esta estivesse identificada como LOCAL bastaria devolver o resultado no RETURN.

Código: Selecionar todos

Function Main()
Local a,b
a := "12345678"
b := ValPos( a , 2 )
Return b

Código: Selecionar todos

Function RetornaValorNaPosicao( Valor, QualPosicao )
Return ValPos( Valor, QualPosicao )
Acho até que PROCEDURE é um termo em desuso ja que a possibilidade de uso de FUNCTION se torna mais maleável.

Só não entendi direito qual a forma de uso desta função que para mim é nova.

O 2 retorna a segunda posição?
O 2 retorna os dois caracteres a esquerda/direita?