26 Mai 2013 13:28
3O|1|00509236||^^^HDL|||||||||||Serum||||||||||QC94R|1|^^^HDL|37.7|mg/dl||N||F||||2013050610234
3O|1|509236||^^^Trig|||||||||||Serum||||||||||QC94R|1|^^^Trig|139.0|mg/dl||N||F||||2013050610234
n_Pos2 := AT( "||^^^", c_Linha ) - 01 && n_Pos2 = 11 da posição do "6".
n_Pos1 := RAT( "|", c_Linha, n_Pos2 ) + 01 && n_Pos1 = 6 da posição do "5".
c_Id := SUBS( c_Linha, n_pos1, n_Pos2-n_Pos1 ) && resulta "509236".
n_Pos2 := AT( "||^^^", c_Linha ) - 01 && n_Pos2 = 11 da posição do "6".
n_Pos1 := RAT( "|", c_Linha, n_Pos2 ) + 01 && n_Pos1 = 83 sempre, mesmo usando outros valores para o 3º parâmetro.
n_Pos4 := HB_AT( "||^^^", c_Linha ) - 02 && Posição 11.
c_L1 := LEFT( c_Linha, n_Pos4 ) && Sub-string, "3O|1|509236".
n_Pos3 := HB_RAT( "|", c_L1 ) + 01 && Posição 6.
c_CodPac := SUBS( c_L1, n_Pos3 ) && ID "509236"
27 Mai 2013 07:58
Creio também se tratar de BUG. Acabei de testar e no xHarbour funciona OK, já no Harbour, o parâmetro nStart realmente não é considerado.Hasse escreveu:Conclusão: Ou eu ainda não entendi como funciona esta função HB_RAT, ou então temos um BUG.
27 Mai 2013 10:18
27 Mai 2013 11:30
27 Mai 2013 11:51
27 Mai 2013 12:50
Function Main()
c_Linha:="3O|1|00509236||^^^HDL|||||||||||Serum||||||||||QC94R|1|^^^HDL|37.7|mg/dl||N||F||||2013050610234"
n_Pos2 := AT( "||^^^", c_Linha ) - 01
n_Pos1 := RAT( "|", c_Linha, n_Pos2 )
c_Id := SUBS( c_Linha, n_pos1 + 1, n_Pos2-n_Pos1 )
c_Linha:="3O|1|509236||^^^Trig|||||||||||Serum||||||||||QC94R|1|^^^Trig|139.0|mg/dl||N||F||||2013050610234"
n_Pos2x := AT( "||^^^", c_Linha ) - 01
n_Pos1x := RAT( "|", c_Linha, n_Pos2x )
c_Idx := SUBS( c_Linha, n_pos1x + 1, n_Pos2x-n_Pos1x )
Clear Screen
?
? n_Pos2 && xHarbour = 13 / Harbour = 13
? n_Pos1 && xHarbour = 5 / Harbour = 82
? c_Id && xHarbour = 509236 / Harbour = vazio
?
? n_Pos2x && xHarbour = 11 / Harbour = 11
? n_Pos1x && xHarbour = 5 / Harbour = 83
? c_Idx && xHarbour = 00509236 / Harbour = vazio
Return Nil
27 Mai 2013 23:32
/*Compilado com IDE da HMG 3.1.3*/
REQUEST HB_GT_WIN_DEFAULT
Function Main()
SetMode(25,80)
c_Linha:="3O|1|00509236||^^^HDL|||||||||||Serum||||||||||QC94R|1|^^^HDL|37.7|mg/dl||N||F||||2013050610234"
n_Pos2 := AT( "||^^^", c_Linha ) - 01
n_Pos1 := hb_RAT( "|", c_Linha, 1, n_Pos2 )
c_Id := SUBS( c_Linha, n_pos1 + 1, n_Pos2-n_Pos1 )
c_Linha:="3O|1|509236||^^^Trig|||||||||||Serum||||||||||QC94R|1|^^^Trig|139.0|mg/dl||N||F||||2013050610234"
n_Pos2x := AT( "||^^^", c_Linha ) - 01
n_Pos1x := hb_RAT( "|", c_Linha, 1, n_Pos2x )
c_Idx := SUBS( c_Linha, n_pos1x + 1, n_Pos2x-n_Pos1x )
Clear Screen
?
? n_Pos2 && xHarbour = 13 / Harbour = 13
? n_Pos1 && xHarbour = 5 / Harbour = 82
? c_Id && xHarbour = 509236 / Harbour = vazio
?
? n_Pos2x && xHarbour = 11 / Harbour = 11
? n_Pos1x && xHarbour = 5 / Harbour = 83
? c_Idx && xHarbour = 00509236 / Harbour = vazio
inkey(0)
Return Nil
28 Mai 2013 04:52
28 Mai 2013 06:56
Pablo César escreveu:descrição do hb_Rat() onde diz: "If 3rd and 4th parameters is not specified, then hb_RAt() is equal to RAt()." (se o terceiro e quarto parâmetros não são especificados, ai o hb_Rat() irá se comportar como o Rat()). Então como vê o 3 e 4 parâmetros (ambos) deverão ser informados, e não só o terceiro.
28 Mai 2013 11:48
n_Pos1 := hb_RAT( "|", c_Linha, 1, n_Pos2 )
n_Pos1x := hb_RAT( "|", c_Linha, 1, n_Pos2x )
n_Pos1 := hb_RAT( "|", c_Linha, 1, Nil, n_Pos2 )
n_Pos1x := hb_RAT( "|", c_Linha, 1, Nil, n_Pos2x )
hb_RAt( <cSearch>, <cString>, [<nStart>], [<nEnd>] )
28 Mai 2013 18:20
Também ! Eu ia dizer isso, mas acabei esquecendo. E dessa forma é possível porque ao omitir o terceiro parâmetro o seu valor irá ser 1 como DEFAULT.Jairo Maia escreveu:Para esta forma:n_Pos1 := hb_RAT( "|", c_Linha, 1, Nil, n_Pos2 )
n_Pos1x := hb_RAT( "|", c_Linha, 1, Nil, n_Pos2x )
29 Mai 2013 21:07
n_Pos1 := hb_RAT( "|", c_Linha, 1, Nil, n_Pos2 )
c_Linha := "3O|1|0000497130||^^^Glu|||||||||||Serum||||||||||Q774R|1|^^^Glu|98.8|mg/dl||N||F||||20130506093645"
n_Pos1 := HB_AT( "||^^^", c_Linha )
n_Pos2 := HB_RAT( "|", c_Linha, nn1, n_Pos2 ) + 01
c_CodPac := SUBS( c_Linha, n_Pos2, n_Pos1 - n_Pos2 )
29 Mai 2013 22:33
Note que o parâmetro n_Pos2x aqui está sendo desconsiderada. Pois o hb_RAT aceita 4 parâmetros somente. O parâmetro Nil pode ser substituido por n_Pos2x ou seja:Jairo Maia escreveu:Para esta forma:n_Pos1 := hb_RAT( "|", c_Linha, 1, Nil, n_Pos2 )
n_Pos1x := hb_RAT( "|", c_Linha, 1, Nil, n_Pos2x )
30 Mai 2013 14:40
*--------------------------------------------------------------------------------------------------
* Finalidade: Testar a Função HB_RAT() do Harbour, usando os parâmetros 3 e 4.
*--------------------------------------------------------------------------------------------------
#include "MiniGUI.ch"
*
#Define CRLF Chr(13) + Chr(10)
*
//// REQUEST HB_GT_WIN_DEFAULT // Janela DOS - Temporário para testes.
*
FUNCTION Main( )
*
LOCAL cString
LOCAL cSearch
LOCAL i, y, r, nLen
cString := "a_cdef_cdeedfjg_cdeb"
cSearch := "cde"
nLen := Len( cString )
c_Text := " Parm_1, Pamr_2, Parm_3, Parm_4 = Posição" + CRLF
c_Text += " ------- ---------------- ------- ------- --------" + CRLF
FOR y := 1 TO nLen
FOR i := 1 TO nLen
r := hb_RAt( cSearch, cString, y, i )
IF r != 0
c_Text += 'hb_RAt( "' + cSearch + '", "' + cString + '", ' + strzero( y, 2 ) + ', ' +;
strzero( i, 2 ) + ' ) = ' + hb_ntos( r ) + CRLF
ENDIF
NEXT
NEXT
*
FGravaTxt( "_HB_RAT.txt", c_Text )
*
RETURN( NIL )
*
*
*==================================================================================================
FUNCTION FGravaTxt( c_Arq, c_Text )
*
IF FILE( c_Arq )
*
FHandle := FOpen( c_Arq, 02 )
FSeek( FHandle, 00, 02 )
*
ELSE
*
FHandle := FCreate( c_Arq, 00 )
*
ENDIF
*
Fwrite( FHandle, c_Text )
FWriteLine( FHandle, "" )
*
FClose( FHandle )
*
RETURN NIL
*
*
*==================================================================================================
STATIC FUNCTION FWriteLine( FHandle, c_String )
*
Fwrite( FHandle, c_String )
Fwrite( FHandle, CRLF )
*
RETURN Nil