Pesquisar em um stringcom o at() a partir de uma posicao
Moderador: Moderadores
- rubens
- Colaborador

- Mensagens: 1520
- Registrado em: 16 Ago 2003 09:05
- Localização: Nova Xavantina - MT
Pesquisar em um stringcom o at() a partir de uma posicao
Bom dia...
Tem esse argumento na função AT()?
Pesquisar a partir de uma posição?
Por exemplo tenho uma string
cString := "Nome:Rubens Nome:José Nome:Maria Nome:Joaquim"
Eu preciso ler todos os nomes, então leio o primeiro "Nome:" e vou pesquisar novamente com o AT() a partir daquela posição até ler todos os nomes.
Na documentação do Clipper/Harbour que tenho só tem a informação de AT( cSearch, cString).
Na xDEV quando mostra a ajuda do comando ele dá opções de AT( cSearch, cString, nSart, nEnd ). Provavelmente o Vailton achou isso em alguma documentação, mas testei e não compila.
Obrigado
Rubens
Tem esse argumento na função AT()?
Pesquisar a partir de uma posição?
Por exemplo tenho uma string
cString := "Nome:Rubens Nome:José Nome:Maria Nome:Joaquim"
Eu preciso ler todos os nomes, então leio o primeiro "Nome:" e vou pesquisar novamente com o AT() a partir daquela posição até ler todos os nomes.
Na documentação do Clipper/Harbour que tenho só tem a informação de AT( cSearch, cString).
Na xDEV quando mostra a ajuda do comando ele dá opções de AT( cSearch, cString, nSart, nEnd ). Provavelmente o Vailton achou isso em alguma documentação, mas testei e não compila.
Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você
"
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Pesquisar em um stringcom o at() a partir de uma posicao
Veja:
At()
Locates the position of a substring within a character string.
Syntax
At( <cSearch>, <cString>, [<nStart>], [<nEnd>] ) --> nPos
Arguments
<cSearch> is the substring to search for.
<cString> is the searched character string.
<nStart> A numeric expression indication the position of the first character in <cString> to begin the search with. It defaults to 1.
<nEnd> A numeric expression indicating the position of the last character in <cString> to include in the search. It defaults to Len(<cString>). If <nEnd> is a negative value, the position for the last character is counted from the end of <cString>.
Return
The function returns a numeric value which is the position in <cString> where <cSubString> is found. The return value is zero when <cSubString> is not found.
Description
The function At() searches the string <cString> from left to right for the character string <cSearch>. The search begins at position <nStart> and is case-sensitive. If <cString> does not contain <cSearch>, the function returns 0.
Note: use function RAt() to search <cString> from right to left.
Example
// The example demonstrates various results of At().
PROCEDURE Main()
LOCAL cString := "xHarbour"
? At( "Ha", cString ) // result: 2
? At( "ARB" , cString ) // result: 0
? At( "ARB" , Upper(cString) ) // result: 3
? At( "r" , cString ) // result: 4
? At( "r" , cString, 5 ) // result: 8
? At( "r" , cString, 5, 7 ) // result: 0
RETURN
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
- rubens
- Colaborador

- Mensagens: 1520
- Registrado em: 16 Ago 2003 09:05
- Localização: Nova Xavantina - MT
Pesquisar em um stringcom o at() a partir de uma posicao
Toledo...
Com AT() dá erro se colocar mais de 2 argumentos... Daí lembrei que no harbour normalmente tem a função equivalente colocando hb_ na frente do nome da função, daí coloquei HB_AT() e funcionou belezinha... com esta relação que você passou que é a mesma que eu tinha visto.
Resolvido.
Obrigado
Rubens
Com AT() dá erro se colocar mais de 2 argumentos... Daí lembrei que no harbour normalmente tem a função equivalente colocando hb_ na frente do nome da função, daí coloquei HB_AT() e funcionou belezinha... com esta relação que você passou que é a mesma que eu tinha visto.
Resolvido.
Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você
"
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Pesquisar em um stringcom o at() a partir de uma posicao
Um exemplo do que você pode fazer:
ou
Abraços
Código: Selecionar todos
PROCEDURE Main()
cString := "Nome:Rubens Nome:José Nome:Maria Nome:Joaquim"
cString := Subs(cString,6)+"Nome:"
Do While !Empt(cString)
? Subs(cString,1,AT("Nome:",cString)-1)
cString:=Subs(cString,AT("Nome:",cString)+5)
EndDo
ReturnCódigo: Selecionar todos
PROCEDURE Main()
cString := "Nome:Rubens Nome:José Nome:Maria Nome:Joaquim"
aTokens := HB_ATokens( cString, "Nome:" )
FOR i := 1 TO Len( aTokens )
if !Empt(aTokens[i])
? aTokens[i]
endif
NEXT
ReturnToledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
- rubens
- Colaborador

- Mensagens: 1520
- Registrado em: 16 Ago 2003 09:05
- Localização: Nova Xavantina - MT
Pesquisar em um stringcom o at() a partir de uma posicao
Beleza... Toledo...
Eu fazia algo bem parecido com o que voce colocou n o primeiro exemplo...
Essa Atokens aí é bem interessante !!!
Eu tô/tava precisando disso para usar na rotina de importação de xml, para contar os produtos. Mas eu não quero ficar redimensionando a string.
Daí o Toya me deu a idéia de contar de 1 até 1000 que é a qtde máxima de itens em uma nfe. O algoritimo ficou melhor do que ficar redimensionando, mas aí apareceu o problema de que a tag <det item="N"> é o início de cada produto mas o final é <det> daí um <det> qualquer poderia ser o final de qualquer produto. Teria que redimensionar a String de novo. Vi o argumento de "a partir de" no AT(), pareceu ser a melhor saída.
Mas com essa opção do aTokens aí me parece que fica melhor ainda. Vamos pros testes...
Obrigado
Rubens
Eu fazia algo bem parecido com o que voce colocou n o primeiro exemplo...
Essa Atokens aí é bem interessante !!!
Eu tô/tava precisando disso para usar na rotina de importação de xml, para contar os produtos. Mas eu não quero ficar redimensionando a string.
Daí o Toya me deu a idéia de contar de 1 até 1000 que é a qtde máxima de itens em uma nfe. O algoritimo ficou melhor do que ficar redimensionando, mas aí apareceu o problema de que a tag <det item="N"> é o início de cada produto mas o final é <det> daí um <det> qualquer poderia ser o final de qualquer produto. Teria que redimensionar a String de novo. Vi o argumento de "a partir de" no AT(), pareceu ser a melhor saída.
Mas com essa opção do aTokens aí me parece que fica melhor ainda. Vamos pros testes...
Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você
"
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Pesquisar em um stringcom o at() a partir de uma posicao
Olá Pessoal,
Em Harbour, para usar mais de 2 argumentos é a função Hb_At():rubens escreveu:Com AT() dá erro se colocar mais de 2 argumentos...
Código: Selecionar todos
Hb_At( <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)
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)
Pesquisar em um stringcom o at() a partir de uma posicao
Eu uso essa função:
Código: Selecionar todos
cBusca:="de"
cString:="Rio de Janeiro"
FOR I:=1 TO Len(cString)
IF (I > 3) .and. (hwg_NUMAT( cBusca, cString) > 0)
ENDIF
NEXT
IF hwg_NUMAT( cBusca, cString) > 0
Alert("Achou")
ENDIF
FUNCTION hwg_NUMAT( ... )
LOCAL nCount := 0, I, cSearch, cString
cSearch := hb_PValue(1)
cString := hb_PValue(2)
FOR I:=1 TO Len(cString)
IF SubStr(cString, I, Len(cSearch)) == cSearch
nCount ++
ENDIF
NEXT
RETURN nCount
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Pesquisar em um stringcom o at() a partir de uma posicao
Só pra complementar:
At() compatível com Clipper
hb_At() igual At() mas aceita parâmetros adicionais
At() com mais parâmetros é do xHarbour, talvez na xhb.lib de compatibilidade.
Não recomendo mexer com isso, porque pode acrescentar outras compatibilidades não desejadas. (se é que existe lá At() com mais parâmetros)
At() compatível com Clipper
hb_At() igual At() mas aceita parâmetros adicionais
At() com mais parâmetros é do xHarbour, talvez na xhb.lib de compatibilidade.
Não recomendo mexer com isso, porque pode acrescentar outras compatibilidades não desejadas. (se é que existe lá At() com mais parâmetros)
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/