Erro Ao extrair Digitos

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Samuk.exe
Usuário Nível 2
Usuário Nível 2
Mensagens: 65
Registrado em: 25 Mai 2010 15:58
Localização: anapolis

Erro Ao extrair Digitos

Mensagem 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
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Erro Ao extrair Digitos

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Samuk.exe
Usuário Nível 2
Usuário Nível 2
Mensagens: 65
Registrado em: 25 Mai 2010 15:58
Localização: anapolis

Re: Erro Ao extrair Digitos

Mensagem 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
Editado pela última vez por Toledo em 03 Jun 2010 22:15, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Erro Ao extrair Digitos

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Samuk.exe
Usuário Nível 2
Usuário Nível 2
Mensagens: 65
Registrado em: 25 Mai 2010 15:58
Localização: anapolis

Re: Erro Ao extrair Digitos

Mensagem por Samuk.exe »

Valeu Toledo...

Com o Substr funcionou Sim!

Abraços!
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Erro Ao extrair Digitos

Mensagem 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?
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Responder