-
Notifications
You must be signed in to change notification settings - Fork 12
/
TGETMSG.prw
89 lines (69 loc) · 2.2 KB
/
TGETMSG.prw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#Include 'Protheus.ch'
//====================================================================================================================\\
/*/{Protheus.doc}TGETMSG
====================================================================================================================
@description
Recebe uma Mensagem e uma lista de parâmetros e retorna os dados encontrados
@author Thiago Mota
@author <mota.thiago@totvs.com.br>
@author <tgmspawn@gmail.com>
@version 1.0
@since 31 de mar de 2017
/*/
//===================================================================================================================\\
User Function TGETMSG(cMsg, aParamStr, cPermitido, bCorte)
Local aRet:= {}
Local nX
Local cAux
Local aAux:= {}
Local cValor
Local lCorte
Default cMsg:= ""
Default aParamStr:= {}
Default cPermitido:= "0123456789" // Padrão é somente números
Default bCorte:= {|cValor, cBuffer| ! (cBuffer $ cPermitido) }
// ==========================================================
// Busca as Strings dentro da Mensagem, e separa para buscar os códigos
// ==========================================================
cAux := Upper( cMsg )
For nX:= 1 To Len(aParamStr)
If ! Empty(AllTrim(aParamStr[nX]))
nDe:= 1
While nDe > 0
nDe:= RAt( Upper( aParamStr[nX] ), cAux )
If nDe > 0
aAdd( aAux, SubStr( cAux, nDe + Len(aParamStr[nX]) ) )
If nDe == 1
nDe:= 0
Else
cAux:= SubStr( cAux, 1, --nDe )
EndIf
EndIf
EndDo
EndIf
Next (nX)
// ==========================================================
// Separa os códigos nas mensagens encontradas
// ==========================================================
For nX:= 1 To Len(aAux)
cAux := aAux[nX]
cValor := ""
nAt:= 0
lCorte:= .F.
While ! lCorte .And. ++nAt <= Len(cAux)
cObsAtu:= Substr(cAux, 1, nAt)
cBuffer:= Right(cObsAtu, 1)
If cBuffer $ cPermitido
cValor+= cBuffer
EndIf
If Eval( bCorte, cValor, cBuffer )
lCorte:= .T.
If ! Empty(cValor)
aAdd(aRet, cValor)
EndIf
EndIf
EndDo
Next nX
Return ( aRet )
// FIM da Funcao TGETMSG
//======================================================================================================================