Clipper On Line • Ver Tópico - HB_AT() e HB_RAT()

HB_AT() e HB_RAT()

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

HB_AT() e HB_RAT()

Mensagempor Hasse » 26 Mai 2013 13:28

Boa tarde colegas.

Observemos as 2 linhas abaixo:
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


-O comprimento das linhas é variável, como observamos acima;
-São 2 exames do mesmo paciente, nº 509236.

-Vamos nos ater ao conteúdo da 2ª linha.

-No xHarbour para buscar o ID do paciente eu uso as funções AT() e RAT(), como abaixo
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".

-No xHarbour a função AT() pesquisa da esquerda para a direita, e a função RAT() pesquisa da direita para a esquerda.

-No Harbour MiniGui:
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.

Eu consegui buscar o valor dsejado usando sub-string, como abaixo:
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"

Conclusão: Ou eu ainda não entendi como funciona esta função HB_RAT, ou então temos um BUG.

Alguém tem alguma informação ou instrução de como se usa ?
Ou então uma outra função que faça o desejado ?

Estou usando a versão 3.1.1 do Harbour.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar de usuário

Hasse
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 784
Data de registro: 19 Out 2004 10:30
Cidade/Estado: Jaraguá do Sul - SC
Curtiu: 0 vez
Mens.Curtidas: 22 vezes

HB_AT() e HB_RAT()

Mensagempor Jairo Maia » 27 Mai 2013 07:58

Olá Hasse,

Hasse escreveu:Conclusão: Ou eu ainda não entendi como funciona esta função HB_RAT, ou então temos um BUG.
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.
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 de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2440
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 294 vezes
Mens.Curtidas: 264 vezes

HB_AT() e HB_RAT()

Mensagempor Pablo César » 27 Mai 2013 10:18

Oi Hasse, quando você disse que está usando versão 3.1.1, já logo vi que refería-se a HMG. A ultima versão mais estável (ainda com pequenos ajustes a fazer para o próximo release) é a versão 3.1.3. Lembre sempre que quando se referir a HMG e apartir da versão 3.1.x, você está normalmente (por default), trabalhando no padrão UTF-8, isto é, padrão UNICODE. O tratamento de strings deve ser diferenciado. Por isso se for trabalhar com a versão 3.1.x da HMG, não utilize AT nem HB_AT, nem SubStr, nem qualquer função de tratamento de strings. Para isso o Dr. Soto, criou novas funções que começam com HMG_. Leia este tópico: http://hmgforum.com/viewtopic.php?p=26698#p26698

Então o meu conselho é você fazer um upgrade da versão HMG para 3.1.3 e passar a utilizar as funções que estão listadas nesse link que passei.

Eu adorei essa nova implementação de utilização do padrão UNICODE na HMG. Isso foi um novo ganho que ainda não apareceu nas outras ferramentas gráficas (refiro-me as ferramentas xBase, como FiveWin, hwgui, Minigui Extended). Realmente o uso de padrão UNICODE trouxe a exibição de caracteres internacionais em multi-línguas. Pois podem ser exibidos os caracteres japoneses, chineses, coreanos, árabes, enfim, todos aqueles que antes era um impossível... agora pensa-se de forma diferente com o novo ganho em Harbour.

Sendo assim, não deve ser considerado BUG.
:?
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5539
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 151 vezes

HB_AT() e HB_RAT()

Mensagempor Jairo Maia » 27 Mai 2013 11:30

Olá Pablo,

Os testes que fiz foi em OEM não em UTF-8, e o parâmetro nStart é ignorado no Harbour, já os testes no xHarbour, funcionou ok. Assim, ainda continuo achando que é um BUG do Harbour.
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 de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2440
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 294 vezes
Mens.Curtidas: 264 vezes

HB_AT() e HB_RAT()

Mensagempor Pablo César » 27 Mai 2013 11:51

Oi Jairo, você pode dar um exemplo. Você não está compilando com o include da HMG ? Está compilando em puro Harbour ?
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5539
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 151 vezes

HB_AT() e HB_RAT()

Mensagempor Jairo Maia » 27 Mai 2013 12:50

Olá Pablo,

Compilando e xHarbour e Harbour puro, modo console. Se compilar o exemplo abaixo pode-se ver a diferença:

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
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 de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2440
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 294 vezes
Mens.Curtidas: 264 vezes

HB_AT() e HB_RAT()

Mensagempor Pablo César » 27 Mai 2013 23:32

Oi Jairo, talvez o seu caso seja diferente ao do Hasse. Como ele mencionou 3.1.1, pode ser que a strings não estejam sendo tratadas como UNICODE. Mas voltando ao seu caso, repito não há BUG algum. O que acontece é que no exemplo que você apresentou você está usando RAT() e não hb_Rat(). O RAT() é 100% compativel com Clipper e já o hb_Rat() tem mais a opção de estabelecer o 3º e 4º parâmetros que o RAT() não possui. Agora se você ler a descrição do hb_Rat() (clique aqui) você verá que 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.

Veja eu mudei e deu certinho como deveria dar:
/*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
Ainda assim, nas linhas (22 e 27) você também postou errado. Estão invertidos os valores: 509236 e 00509236. Mas esses erros são irrelevantes, o importante era hb_Rat e 3+4 parâmetros. Acho que matei a charada, certo ?

Obs.: Vocês fizeram comparativos, então tenho a dizer que particularmente, prefiro o Harbour ao invés do xHarbour (cada vez convenço-me mais sobre isso).
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5539
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 151 vezes

HB_AT() e HB_RAT()

Mensagempor Jairo Maia » 28 Mai 2013 04:52

Pablo, as linhas 22 e 27 realmente estão trocadas. Mas como você disse, foi apenas um erro que não interfere no resultado.

Quanto a observação do help, lá diz claramente que se ambos parâmetros forem omitidos seu funcionamento será igual ao RAT, mas pode-se usar apenas um. Porém, tentei também usando todos os parâmetros e não funciona. A sintaxe é:

hb_RAt( <cSearch>, <cString>, [<nStart>], [<nEnd>] )

e não:
hb_RAt( <cSearch>, <cString>, [<nStart>, <nEnd>] )

A postagem que fiz com RAT e não HB_RAT, foi porque antes de postar eu havia testado com ambos: Harbour e xHarbour, e ficou como testei no xHarbour, pois HB_RAT só tem no Harbour.

Não tenho os fontes do xHarbour, mas tentei compilar a função HB_RAT com o fonte do Harbour, e apresenta um erro.

Outrosim, pode-se montar qualquer exemplo com HB_RAT e compilar, e veremos que há problema. Por outro lado, nada contra xHarbour, mas não vejo como voltar a usá-lo. Creio que o Harbour está melhor mesmo.
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 de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2440
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 294 vezes
Mens.Curtidas: 264 vezes

HB_AT() e HB_RAT()

Mensagempor Pablo César » 28 Mai 2013 06:56

Jairo, parece que não te convenceu o enunciado. Então deixe te expor o que eu entendi e analise o conteúdo:

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.


"If 3rd and 4th parameters is not specified"=Se 3ro e 4to parâmetros não estão especidifcados

Com isto eu entendo que 3º E 4º (os dois) o "E" (conjunção) é justamente para ligar um e outro, senão seria "OU", portanto para indicação de sintaxe, seria:

hb_RAt( <cSearch>, <cString>, [<nStart>, <nEnd>] )

A definição da função diz: "hb_RAt() return the location of beginning position of last occurrence a substring of a string", o que se entende de SUBSTRING ou aliás como compõe-se uma SUBSTRING ?

Se for analisar, você só pode PEGAR uma SUBSTRING de uma STRING com ao menos o parâmetro de onde começa, certo ? Ex.: SubStr(STRING,1)

Isto é, você NÃO pode omitir o parâmetro de onde começa. E pelo seu exemplo, o parâmetro que você designou como terceiro, deveria ser como quarto parâmetro do HB_RAT(). Certo ?

Para mim, não há BUG algum, podemos até dizer que a indicação que foi feita como SINTAXE não esteja totalmente adequada, até seria admissível mas a necessidade do terceiro parâmetro indicando onde COMEÇA a SUBSTRING é fundamental.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5539
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 151 vezes

HB_AT() e HB_RAT()

Mensagempor Jairo Maia » 28 Mai 2013 11:48

Olá Pablo,

As vezes é muito bom levar uma discussão à exaustão. Depois de ler seu post, acabei por acaso descobrindo que a hb_Rat() mudou (ou corrigiu) o raciocínio de uso em relação ao xHarbour.

No exemplo que postei acima, basta alterar as linhas 9 e 14 que estão assim:
n_Pos1 := hb_RAT( "|", c_Linha, 1, n_Pos2 )
n_Pos1x := hb_RAT( "|", c_Linha, 1, n_Pos2x )


Para esta forma:
n_Pos1 := hb_RAT( "|", c_Linha, 1, Nil, n_Pos2 )
n_Pos1x := hb_RAT( "|", c_Linha, 1, Nil, n_Pos2x )


Funcionou corretamente, e na minha opinião acho até mais correto, lembrando que a sintaxe é:
hb_RAt( <cSearch>, <cString>, [<nStart>], [<nEnd>] )
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 de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2440
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 294 vezes
Mens.Curtidas: 264 vezes

HB_AT() e HB_RAT()

Mensagempor Pablo César » 28 Mai 2013 18:20

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 )

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.

O importante é estar bem explicado quanto o seu uso, entendê-lo como foi criado e não achar que é um BUG. Valeu !
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5539
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 151 vezes

HB_AT() e HB_RAT()

Mensagempor Hasse » 29 Mai 2013 21:07

Caros colegas Jairo e Pablo. Informação confirmada.

Fiz os testes com a função:
n_Pos1 := hb_RAT( "|", c_Linha, 1, Nil, n_Pos2 )

e as leituras passaram a ser corretas.

Desta forma colocado, devemos ter em mente que esta Função no Harbour funciona de uma forma um pouco diferente daquela do xHarbour, ou seja, os parâmetros 3 e 4 devem ser invertidos em relação ao xHarbour.
O parâmetro 4 indica onde a pesquisa deve ser iniciada. No xHarbour isto se informa no parâmetro 3. É estranha esta forma, mas é aceitar e memorizar o formato e tocar a bola prá frente.

O parâmetro 3 funciona como abaixo:
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 )

n_Pos1 retornou 16 - correto.

Para:
nn1 := 1 ->>> n_Pos2 retornou 6 - correto
nn1 := 2 ->>> n_Pos2 retornou 6 - correto
nn1 := 3 ->>> n_Pos2 retornou 6 - correto
nn1 := 4 ->>> n_Pos2 retornou 6 - correto
nn1 := 5 ->>> n_Pos2 retornou 6 - correto
nn1 := 6 ->>> n_Pos2 retornou 1 - incorreto.

Obrigado pela valiosa colaboração.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar de usuário

Hasse
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 784
Data de registro: 19 Out 2004 10:30
Cidade/Estado: Jaraguá do Sul - SC
Curtiu: 0 vez
Mens.Curtidas: 22 vezes

HB_AT() e HB_RAT()

Mensagempor Pablo César » 29 Mai 2013 22:33

Esclarecendo ainda mais esta questão:
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 )

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:

n_Pos1 := hb_RAT( "|", c_Linha, 1, n_Pos2)

ou

n_Pos1 := hb_RAT( "|", c_Linha, Nil, n_Pos2)
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5539
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 151 vezes

HB_AT() e HB_RAT()

Mensagempor Hasse » 30 Mai 2013 14:40

Copiando e incrementando, apresento a todos os interessados uma pequena rotina que exemplifica o uso da função HB_RAT(), usando um loop que varre todas as possibilidades e resultados possíveis, usando os parâmetros 3 e 4:
Vejam:
*--------------------------------------------------------------------------------------------------
*     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

O resultado pode ser visto no arquivo "_HB_RAT.txt"
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
Avatar de usuário

Hasse
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 784
Data de registro: 19 Out 2004 10:30
Cidade/Estado: Jaraguá do Sul - SC
Curtiu: 0 vez
Mens.Curtidas: 22 vezes




Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro