Página 1 de 1

Segunda consulta com at() dentro do mesmo textp

Enviado: 12 Jun 2014 15:11
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

Segunda consulta com at() dentro do mesmo textp

Enviado: 13 Jun 2014 03:38
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

Segunda consulta com at() dentro do mesmo textp

Enviado: 13 Jun 2014 08:06
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