Segunda consulta com at() dentro do mesmo textp

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Segunda consulta com at() dentro do mesmo textp

Mensagem por rubens »

Olá...

Na versão 3.10 da NFe agora NFCe, houve mudança no texto que recebemos depois de enviar o xml.

No meu caso:

Código: Selecionar todos

[ENVIO]
Versao=3.00
TpAmb=2
VerAplic=3.00
CStat=103
XMotivo=Lote recebido com sucesso
CUF=51
NRec=510000000296577
DhRecbto=12/06/2014 13:51:23
TMed=1
Autorizado o uso da NF-e
[RETORNO]
Versao=3.10
TpAmb=2
VerAplic=3.10
NRec=510000000296577
CStat=100
XMotivo=Autorizado o uso da NF-e
CUF=51
[NFE74]
Versao=3.10
TpAmb=2
VerAplic=3.10
CStat=100
XMotivo=Autorizado o uso da NF-e
CUF=51
ChNFe=51140607407005000182650010000000741000000749
DhRecbto=12/06/2014 13:51:24
NProt=151140000226225
DigVal=Oru7GXbaEpzkf8Ca4QYuhUZyG8c=
Eu preciso pegar o CStat=100 dentro da tag [RETORNO].
Como usar o AT() uma segunda vez, porque eu pesquisaria o retorno com AT("[RETORNO]",TEXTO) vai me retornar a posição... e para pesquisar de novo a partir da posição atual?
Ou vocês também podem me sugerir outra opção...

Desde já agradecido...

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Segunda consulta com at() dentro do mesmo textp

Mensagem por Jairo Maia »

Olá Rubens,

Acho que pode ser assim:

Código: Selecionar todos

Clear Screen

 cStat := PegaCStat( "cNomeArquivo.txt" )

 alert( cStat )

Return Nil

Function PegaCStat( cArquivo )
 Local x, cString, lPegaStat := .f.
 Local cNfce := MemoRead( cArquivo )
 Local nQtdLin := MLCount( cNfce )
 
 For x=1 To nQtdLin

  cString := Trim( MemoLine( cNfce, Nil, x ) )

  If ( "[RETORNO]" $ Upper( cString ) )
   lPegaStat := .t.
  ElseIf lPegaStat .And. ( "CSTAT=" $ Upper( cString ) )

   /*
     se você quer que retorne a linha completa, ex: CStat=100
     remova a linha do StrTran abaixo. com ela retorna só o 100
   */
   cString := StrTran( Upper( cString ), "CSTAT=" )

   Exit  // pega a linha e sai...

  EndIf

 Next

Return cString
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Segunda consulta com at() dentro do mesmo textp

Mensagem por rubens »

Valeu Jairo.... isso mesmo...
Muito boa lógica simples e enxuta...
Essa tática de varrer as linhas criando um flag para saber se já iniciou o bloco foi bacana....
E o retorno que quero é o 100 mesmo...

Muito obrigado....

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Responder