Página 1 de 2

Problema com a funçao AT()....

Enviado: 17 Mai 2007 21:39
por Ale SB
Blz Galera,

To apanhando aqui, nao sei oq to fazendo errado, mas, ao pesquizar uma palavra q existe em um Texto, a Funçao AT() ta retornando zero, sendo q existe a palavra..... :% to maluco ja.....nao entendo oq ta errado, agradeceria c alguma boa alma pudese me ajudar:

Código: Selecionar todos

@ 03,02 GET cCidade ...............
.
.
TESTE(cCidade)
.
.
FUNCTION TESTE(pCidade)
      
   ? 'Cidade: ',  (PegaCidade( pCidade, Texto ))

RETURN 
.
.
.
FUNCTION PegaCidade( pCida,pTexto )
   LOCAL Pos

   pTexto := Upper(pTexto)
   Pos   := At( pCida, pTexto ) //A palavra existe, mesmo, assim retorna 0
.
.
.

@braços Ale

Enviado: 17 Mai 2007 22:01
por Pablo César
Alessandro,

Creio que o único problema do seu AT(), são os parâmetros que você utilizou, isto é, estão invertidos. Dê uma olhada no código exemplo que você fez e eu tive que alterar para dar sentido a coisa....

Código: Selecionar todos

CLS
cCidade:=PADR("CIDADE: PARANAGUA - PR",30)
@ 03,02 GET cCidade PICT "@!"
READ
TESTE(cCidade)

FUNCTION TESTE(pCidade) 
? 'Cidade: '+PegaCidade( pCidade, ":" )
RETURN 

FUNCTION PegaCidade( pCida,pTexto ) 
LOCAL Pos

pTexto := Upper(pTexto)
Pos   := At( pTexto, pCida ) // Aqui onde você inverteu os parâmetros
IF Pos>0
   VRET:=SUBSTR(pCida,Pos+1)
ELSE
   VRET:=SPACE(30)
ENDIF
RETURN VRET
Um clip-abraço :)Pos

Enviado: 17 Mai 2007 22:18
por Ale SB
Ok Pablo....assim dá certo.......mas, tem problema......

Eu nao sei oq o usuario vai digitar, ....simplismente ele digita a cidade, e a variavel repaça p/ a funçao vereficar c existe ou nao a cidade no texto, e me retorna a posiçao dela no texto......

Por isso teria q ser assim:

Código: Selecionar todos


cCidade:=space(30) 
@ 03,02 GET cCidade PICT "@!" 
READ 
TESTE(cCidade) 

FUNCTION TESTE(pCidade) 
? 'Cidade: '+PegaCidade( pCidade, TextoPesquisado ) 
RETURN 

FUNCTION PegaCidade( pCida,pTexto ) 
LOCAL Pos 

pTexto := Upper(pTexto) 
Pos   := At( pTexto, pCida ) // Aqui onde você inverteu os parâmetros 
? Pos //=========retorna 0
IF Pos>0 
   VRET:=SUBSTR(pCida,Pos+1) 
ELSE 
   VRET:=SPACE(30) 
ENDIF 
RETURN VRET
Agora nao entendi pq esta invertido os parametros ? nao eh AT(palavra,txtpesquisado)

Entende meu dilema....sei q alguma coisa ta errada....mas, nao to enchergando o erro....
@braços Ale

Enviado: 17 Mai 2007 22:34
por Maligno
Ale SB escreveu:Agora nao entendi pq esta invertido os parametros ? nao eh AT(palavra,txtpesquisado)
Você não está invertendo. O Pablo se confundiu com a ordem dos parâmetros. A sintaxe (basta pesquisar o NG) é At(palavra,texto_a_pesquisar).
Mas é provável (não dá pra ter certeza) que o seu erro esteja no fato de você ter convertido o texto para maiúsculas e a palavra não. Você não mostra o GET todo. Por isso não posso dizer com certeza. Mas, se só retorna zero, é provável que seja isso mesmo.

Para ter garantia de que (quase) nunca dará errado:

Código: Selecionar todos

function PegaCidade(pCida,pTexto) 
return At(Upper(pCida),Upper(pTexto))
O "quase" fica por conta da acentuação que, existindo, poderá comprometer a sua pesquisa.

Detalhe: se "texto_a_pesquisar" for uma lista de cidades, lembre-se de separá-las por algum caractere que não faça parte desses nomes. Exemplo: "Londrina,Jiparana,Guaratuba". Sem essas vírgulas, ao procurar pela cidade "Paranagua", esta será encontrada, apesar de não estar na lista.

[]'s
Maligno
http://www.buzinello.com/prg

Enviado: 17 Mai 2007 22:48
por Ale SB
Maligno...

O get ta em maiuscula sim.....mas...pra conferir:

Código: Selecionar todos

local Pos
   Pos := At(Upper(pCida),Upper(pTexto))
? pCida   // Ok Maiuscula....retorna certo o nome da cidade
? pTexto // Ok Maiusculo....retorna certo o Texto
? Pos      // Retorna 0 -----Coisa de loko...né

Enviado: 17 Mai 2007 22:56
por Pablo César
Agora sim... creio que vai clarear a tua situação, veja:

Código: Selecionar todos

CLS
pTexto:="Cidade de PARANAGUA, situada no estado do Paraná, é o berço da civilizaçao do Paraná."
pTexto:=pTexto+CHR(13)+CHR(10)+"E a cidade ANDRADINA, é a cidade onde você mora, certo ?"
pTexto:=pTexto+CHR(13)+CHR(10)+"Embora a cidade de São Paulo, esteja aqui no texto, você nao vai encontrar..."+CHR(13)+CHR(10)
? pTexto
DO WHILE .T.
   cCidade:=SPACE(30)
   @ 12,00 GET cCidade PICT "@!"
   READ
   TESTE(cCidade,pTexto)
   IF LASTKEY()=27
      EXIT
   ENDIF
ENDDO

FUNCTION TESTE(pCidade,pTexto)
VTXT:=PegaCidade( ALLTRIM(pCidade), pTexto ) // Olha o ALLTRIM() aqui
IF LEN(VTXT)>0
   @ 14,00 SAY 'Cidade: '+VTXT
ENDIF
RETURN NIL

FUNCTION PegaCidade( pCida,pTexto ) 
LOCAL Pos

pTexto := Upper(pTexto)  // Isto talvez nao resolva nos casos com acentos
Pos   := At( pCida, pTexto ) // Aqui onde esta trocado os parametros
//            |      |
//            |      +---> String onde procura
//            +---> String a ser procurada
IF Pos>0
   VRET:=SUBSTR(pTexto,Pos)
   VATE:=AT(CHR(13),VRET)-1
   VRET:=SUBSTR(VRET,1,VATE)
   ALERT("Achou a cidade no texto, na posicao "+ALLTRIM(STR(Pos))+";Aqui o texto: "+VRET)
ELSE
   VRET:=""
   ALERT("Nao achou a CIDADE no texto")
ENDIF
RETURN VRET
A questão de maiusculas, não funcionariam nos casos de C cedilha e acentos. O erro principal era que faltava o ALLTRIM() na pCidade. Não encontrava porque verificava com espaços exedentes da variável. Sacou ?

Um clip-abraço :)Pos

Enviado: 17 Mai 2007 23:10
por Pablo César
Se o problema é acentuação e C cedilha. Faça uma função que verifique se tem algum acento ou C cedilha, e converta a string. Só que você teria que fazer tanto no TEXTO como na variável essa função TRADUTORA.

Agora, eu gostaria de saber, onde é que você utiliza isto. Isto é, com que objetivo e em que sistema o usuário utiliza isto. Esta pergunta é importante, não somente para ficar aqui registrado a sua idéia, senão também para buscar outra alternativa mais segura.

Nos dê um retorno.

Um clip-abraço :)Pos
Obs.: Os parametros do seu AT() estavam corretos, faltava o ALLTRIM e precisa tratar os acentos (tanto no TEXTO quanto na variável do GET)

Enviado: 17 Mai 2007 23:16
por Maligno
Boa lembrança. Esqueci a questão dos espaços excedentes. Mas só faltou isso.

[]'s
Maligno
http://www.buzinello.com/prg

Enviado: 17 Mai 2007 23:29
por Pablo César
Tem mais... e se naquele texto (digamos que é o próprio usuario que edita), tiver os nomes das cidades abreviadas.... exemplo: São Francisco do Sul, Rio de Janeiro, ou até mesmo estiver mal escrito (faltando uma letra). Realmente em questão TEXTO, não dá pra se confiar... Neste caso, sou a favor de um BD que tenha todas as cidades cadastradas (isto é possível tem na internet) e fazer a pesquisa dentro de um TBROWSE ou DBEDIT com procura em ordem alfabética.

Gostaria de receber a sua opinião Alessandro.

No aguardo.... Imagem

Enviado: 18 Mai 2007 01:14
por Ale SB
Obs.:..... faltava o ALLTRIM........
Pablo matou a pau cara....sem comentarios.....
......e precisa tratar os acentos (tanto no TEXTO quanto na variável do GET)
Isto será...outro "LEÃO" pra gente matar......hehehheh......
Agora, eu gostaria de saber, onde é que você utiliza isto. Isto é, com que objetivo e em que sistema o usuário utiliza isto. Esta pergunta é importante, não somente para ficar aqui registrado a sua idéia, senão também para buscar outra alternativa mais segura.
Cara eh o seguinte....vou buscar dados em uma pagina da WEB e vou jogar no sistema....tipo assim....

Eu tenho um exemplo q busca a cotaçao do dolar na WEB... joga dentro do BD e apresenta pro usuario......pra uma futura pesquisa...ele pode montar um grafico....com a variaçao do dolar no periodo q quiser ...como vc terá um BD carregado...vcpode fazer oq quiser com as informaçoes.....mas, dá pra fazer com a bolsa de valoes tb.....q fica mais xique ainda.

No momento eu estou montado uma Previsao do Tempo, pra um outro programador colocar no sistema.

Como funcionará:
O usuario entra com o nome da cidade(no sistema) q ele quer pesquisar a Prev do tempo.......e o sistema retorna a informaçao pra ele....e grava no BD....simples né.....hehehhe.....

O q o usuario nao vê:
O sistema vai ate a WEB(um link ja estabelecido) entra com o nome da cidade(q o usuario digitou)....chama outro link....q retorna as informaçoes sobre aquela cidade....no caso a prev do tempo....e manda pro BD do Sistema.....no Sistema ele monta o browse e apresenta pro usuario.

Opçoes:
Pode ser apresentado como ele quiser...pode por exemplo...na inicializaçao do sistema ja buscar as informaçoes e apresentar do jeito q o cliente quiser.....como vai estar gravado no BD....ai vai de cada um, o modo de apresentar os dados.

Requisitos do Sistema:
Este tipo de sistema seria voltado mais pra usuarios de banda larga...mas, dá pra usar com linha discada tb....só fica um poko lento...por causa da conexao...mas..nao eh nada desesperador.

Requisitos do programador
Ter alguma noçao em paginas da WEB...pq nao eh todo Site q dá pra buscar estas informaçoes, sempre tem q verificar o site antes.

Minhas Ferramentas:
Eu estou usando FwH......com CL nao testei nao sei c funciona...por causa das libs...q eu uso...q sao pra xH.......mas.......dá pra fazer em FwH e chamar no CL pra gravar o BD...e depois montar um browse no proprio CL.

Exemplo:
Mire aki p/ baixar o exemplo do Dollar
http://www.sbsistemas.eti.br/download/cotacao.zip

Quero ver se este final de semana termino o da Prev do Tempo, depois eu pósto ele aki tb.

Merchandising :D :
Caso alguem tenha interesse em por alguma informaçao de algum site em seu sistema ou trocar algumas ideias a respeito....pode entrar em contato comigo....pelo forum, pelo email ou Msn.

Pablo, Maligno.....brigadao pelas dicas

@braços Ale

Enviado: 18 Mai 2007 01:19
por Ale SB
Pablo César escreveu:Tem mais... e se naquele texto (digamos que é o próprio usuario que edita), tiver os nomes das cidades abreviadas.... exemplo: São Francisco do Sul, Rio de Janeiro, ou até mesmo estiver mal escrito (faltando uma letra). Realmente em questão TEXTO, não dá pra se confiar... Neste caso, sou a favor de um BD que tenha todas as cidades cadastradas (isto é possível tem na internet) e fazer a pesquisa dentro de um TBROWSE ou DBEDIT com procura em ordem alfabética.

Gostaria de receber a sua opinião Alessandro.

No aguardo.... Imagem
Eh verdade....Pablo...mas, como falei vou ter q matar um Leao por Dia....mas, devagar chegamos lá.....a ideia do BD de cidades eh a melhor opçao...

Enviado: 18 Mai 2007 08:15
por Pablo César
Ale SB escreveu:Eu tenho um exemplo q busca a cotaçao do dolar na WEB... joga dentro do BD e apresenta pro usuario......pra uma futura pesquisa...
Sinceramente Ale, estou impressionado. Como é que você faz isso ?. O quê você utiliza para capturar essas informações, pois vejo que é muito rápido essa operação.
Ale SB escreveu:Requisitos do programador
Ter alguma noçao em paginas da WEB...pq nao eh todo Site q dá pra buscar estas informaçoes, sempre tem q verificar o site antes.
Você viu que existe uma função chamada URL2FILE do WAPI do Maligno, dê uma olhada que é bem rápido na resposta de retorno (ora porque pode ser configurado esse timeout).
Ale SB escreveu:Eh verdade....Pablo...mas, como falei vou ter q matar um Leao por Dia....mas, devagar chegamos lá.....a ideia do BD de cidades eh a melhor opçao...
Você vai tentar a opção de cadastro de cidades ou vai fazer pelo método de traduzir ?. Se for fazer a edição em DOS e apresentará os dados em modo gráfico, então você precisará converter DOSxWIN Veja aqui (pode ser adaptado para converter em maiusculas inclusive). Com certeza a opção de cadastro de cidades é a melhor opção, pois generalmente, o usuário consulta apenas a cidade onde reside e/ou onde tem interés (isso dificilmente fica variando de cidade a cidade), ao menos que seja uma aeromoça, pilot de avião, ou pessoa que viaja muito digo.

O aplicativo de cotação do dólar, foi feito em xHarbour, Five Win ?. Puxa... assim você nos dá água na boca... mostrando em modo gráfico...

Legal ! Um clip-abraço :)Pos

Enviado: 18 Mai 2007 09:04
por Pablo César
Cotação do dólar...

Eu estava pensando aqui com os meus pauzinhos... e logo percebí que daria para fazer em Clipper + WAPI com a função URL2FILE, baixar uma página pré-determinada http://www.bcb.gov.br/?TXDOLAR para um arquivo e importálo para um DBF, ou até mesmo abrir-lo com FOPEN para buscar um determinado delimitador onde estaria o valor da cotação e gravá-lo em DBF e exibi-lo. Isto é perfeitamente possivel. O único tem que verificar de tempos em tempos se o formato daquela página mudaria, porque de ser assim, fica comprometido a extração através do limitador.

Exemplo dessa página que foi extraída em arquivo:
<HTML><HEAD><TITLE>BCB - Taxas de Câmbio</TITLE><Link rel="stylesheet" href="http://www.bcb.gov.br/css/corpoInterno.css"><STYLE TYPE="text/css"><!-- A:hover {color:blue;}--></STYLE></HEAD><BODY class="semTemplate"><br><blockquote><table><tr><td><img src="/gifs/quadro-p.gif" align=middle></td><td>Cotação de fechamento do dólar no dia 17/05/2007, quinta-feira:</td></tr><tr><td> </td><td><blockquote><li>Dólar-dos-EUA:<br><table cellspacing=1><TR><th VALIGN=TOP class="fundoPadraoBEscuro3">Data</th><th class="fundoPadraoBEscuro3" NOWRAP>Taxa de Compra</th><th class="fundoPadraoBEscuro3" NOWRAP>Taxa de Venda</th></TR><tr><td ALIGN=CENTER class="fundoPadraoBClaro2">17/05/2007</td><td ALIGN=RIGHT class="fundoPadraoBClaro2">1,9565</td><td ALIGN=RIGHT class="fundoPadraoBClaro2">1,9573</td></tr></table></td></tr></table></blockquote></OL><br><br><p align="justify"><img src="http://www.bcb.gov.br/img/BulletAzul2.gif"> <font size="1">O Banco Central não assume qualquer responsabilidade pela não simultaneidade ou falta das informações prestadas, assim como por eventuais erros de paridades das moedas, ou qualquer outro, salvo a paridade relativa ao dólar dos Estados Unidos da América em relação ao Real. Igualmente, não se responsabiliza pelos atrasos ou indisponibilidade de serviços de telecomunicação, interrupção, falha ou pelas imprecisões no fornecimento dos serviços ou informações. Não assume, também, responsabilidade por qualquer perda ou dano oriundo de tais interrupções, atrasos, falhas ou imperfeições, bem como pelo uso inadequado das informações contidas na transação.</font></p></CENTER></BODY></HTML>
Os mencionado em negritos seriam os delimitadores para pesquisa/localização da taxa do dólar. A sintaxe que usei do URL2FILE foi:

WAPI -URL2FILE:"http://www.bcb.gov.br/htms/infecon/taxa ... 3;"LOG.LOG"

E o texto exbido é conteúdo do arquivo BCB_TX.TXT.

Legal, Maligno ! Isso graças a sua função do WAPI.

Um clip-abraço :)Pos

Enviado: 18 Mai 2007 09:49
por Ale SB
Blz Pablo....
Sinceramente Ale, estou impressionado. Como é que você faz isso ?. O quê você utiliza para capturar essas informações, pois vejo que é muito rápido essa operação.
Eu ultilizo..uma lib do xH...pra ir até a WEB....e tenho uma funçao...q abre o Codigo Fonte da pagina.....na verdade eu nao baixo a pagina em nenhum Arq TXT...como vc fez ae com a URL2FILE....por isso c torna rapido.......pq a pesquisa e feita direto no codigo fonte da pagina...nao preciso trazer pro BD e nem pra arq Txt....
Você viu que existe uma função chamada URL2FILE do WAPI do Maligno, dê uma olhada que é bem rápido na resposta de retorno (ora porque pode ser configurado esse timeout).
Eu nao conhecia ela....eh bem interessante...muito boa essa lib do maligno...está de parebens......
O aplicativo de cotação do dólar, foi feito em xHarbour, Five Win ?
Eh desenvolvido em FiveWin for xHarbour........mas.....quero fazer uma versao pro CL.....essa URL2FILE....eh uma alternativa pra usar com CL puro.

Muito boa aquela sua funçao pra converter em maiusculas, e traduzir os acentos.....eu devo criar um BD de cidades....e usar esta funçao sua pra traduzir o texto.

Logo q a previsao do tempo estiver pronta eu coloco ae pra vcs testarem.....eu estou trabalhando em alguns projetos....de unificar nossos sistemas com a WEB.......seria a integraçao do CL/FW com a internet......conforme vou tendo novidades nesta area...eu post ae pra vcs.....meu objetivo.........e contribuir pra estar sempre melhorando nossa ferramenta.....e conto com ajuda de vcs tb.....dicas, ideias, opnioes....serao sempre bem vindas.....

@braços Ale

Enviado: 18 Mai 2007 10:14
por Pablo César
Ale SB escreveu:e tenho uma funçao...q abre o Codigo Fonte da pagina
Ahhh, claro o acesso é mais rápido e eficiente. Puxa... uma função como essa precisamos em forma de LIB feita em linguagem C. Essa função, é própria ou é da FW ou xH ?
Ale SB escreveu:Eh desenvolvido em FiveWin for xHarbour
Não estou entendendo... Como assim FiveWin para xHarbour ?. Poderias me explicar ?.
Ale SB escreveu:eu devo criar um BD de cidades....e usar esta funçao sua pra traduzir o texto.
Então se for criar um BD de cidades e for fazer uma versão do seu aplicativo em Clipper, sugiro que esse BD tenha dosi campos para descrição de cidades (uma em DOS e outra em WIN mode).
Ale SB escreveu:Logo q a previsao do tempo estiver pronta eu coloco ae pra vcs testarem
Legal
Ale SB escreveu:eu estou trabalhando em alguns projetos....de unificar nossos sistemas com a WEB.......seria a integraçao do CL/FW com a internet
Puxa, isso interessa de montão !.

Beleza alessandro, estaremos em alerta e pode contar conosco.

Um clip-abraço :)Pos