Página 1 de 2
Comando FOR EACH...IN...NEXT
Enviado: 20 Set 2016 14:00
por Paulo_CPV
Boa tarde!
Eu gostaria de saber como usa o comando FOR EACH ... IN ... NEXT. Não estou entendendo a sintexe do comando. Se alguém me poder ajudar ficarei grato. E qual a diferença entre este comando e o FOR...TO...NEXT.
Abraços,
Paulo
Jacareí/SP
Comando FOR EACH...IN...NEXT
Enviado: 20 Set 2016 15:57
por Vlademiro
Você pode encontrar nessa documentação (ítem 3.2)
http://www.kresin.ru/en/hrbfaq_3.html#Doc2
E nesse também :
https://vivaclipper.wordpress.com/2012/ ... next-loop/
Basicamente o FOR EACH percorre cada ítem de um elemento. Esse elemento pode ser uma string, um array ou um hash.
Comando FOR EACH...IN...NEXT
Enviado: 20 Set 2016 21:11
por Paulo_CPV
Boa noite! Como eu converto o seguinte FOR ... TO ... NEXT para FOR EACH ... IN ... nesta parte do meu sistema.
Código: Selecionar todos
cPeso := "3298765432"
cParte := SUBSTR( cCpf , 1 , 10 )
nParcial := 0
nResult2 := 0
*------------------------------- Calculo do digito
FOR x = 1 TO 10
nParcial += ( VAL ( SUBSTR( cParte , x , 1 ) ) * VAL( SUBSTR ( cPeso , x , 1 ) ) )
NEXT x
Quem puder me ajudar ficarei muito grato.
Atenciosamente,
Paulo Takami
Jacareí/SP
Comando FOR EACH...IN...NEXT
Enviado: 20 Set 2016 21:49
por JoséQuintas
imagine o seguinte: para cada elemento do array, fazer determinada operação.
Usuários do fórum:
Código: Selecionar todos
aForumPCToledo := { "TOLEDO", "JOSE QUINTAS", "ASIMOES", "PAULO_CPV", "VLADEMIRO" }
Com FOR/NEXT
Código: Selecionar todos
FOR nCont = 1 TO Len( aForumPCToledo )
? aForumPCToledo[ nCont ]
NEXT
Com FOR/EACH, atenção que pode obrigar a declarar a variável pra poder funcionar:
Código: Selecionar todos
LOCAL oElement
FOR EACH oElement IN aForumPCToledo
? oElement
NEXT
Pode usar um nome mais adequado ao elemento também, e poderia usar direto o array:
Código: Selecionar todos
LOCAL oUsuario
FOR EACH oUsuario IN { "TOLEDO", "JOSE QUINTAS", "ASIMOES", "PAULO_CPV", "VLADEMIRO" }
? oUsuario
NEXT
Se for usado sobre uma string, cada elemento é uma letra da string.
Comando FOR EACH...IN...NEXT
Enviado: 20 Set 2016 21:54
por JoséQuintas
No seu loop vai precisar de algo mais "avançado", digamos assim, porque precisa saber o número do elemento atual:
Código: Selecionar todos
cPeso := "3298765432"
// cParte := SUBSTR( cCpf , 1 , 10 )
nParcial := 0
nResult2 := 0
FOR EACH oElement IN Substr( cCpf, 1, 10 )
nParcial += VAL ( oElement ) * VAL( SUBSTR ( cPeso , oElement:__EnumIndex , 1 ) ) )
NEXT
Tem outro uso do FOR/EACH mas não entendi, não sei se aplicaria no seu caso, usando duas variáveis de uma vez.
Comando FOR EACH...IN...NEXT
Enviado: 20 Set 2016 22:01
por JoséQuintas
Aplica sim:
Código: Selecionar todos
PROCEDURE Main
LOCAL A, B
FOR EACH A, B IN "123456", "abcdef"
? a, b
NEXT
RETURN
Então:
Código: Selecionar todos
PROCEDURE Main
LOCAL A, B, cCpf := "11122233344", cFator := "3298765432", nParcial := 0
FOR EACH A, B IN cCpf, cFator
nParcial += Val( a ) * Val( b )
NEXT
? nParcial
RETURN
Comando FOR EACH...IN...NEXT
Enviado: 20 Set 2016 22:37
por fladimir
Eita... sempre aprendendo... esta da String não sabia.
Vlw
Comando FOR EACH...IN...NEXT
Enviado: 21 Set 2016 00:23
por JoséQuintas
Tem mais um uso, pra trocar a string original, a string precisa ser por referência:
Código: Selecionar todos
PROCEDURE Main
LOCAL cString := "ABCDEFGHIJKLMNOPQ", cLetra
FOR EACH cLetra IN @cString
IF cLetra $ "BDEF"
cLetra := Lower( cLetra )
ENDIF
NEXT
? cString
RETURN
Nota: Array não precisa, porque por default já é por referência
Comando FOR EACH...IN...NEXT
Enviado: 22 Set 2016 16:48
por Paulo_CPV
Boa tarde! Obrigado por todos me darem ajuda sobre o assunto, mas gostaria se vocês tem mais exemplos do comando para me passar e qual é a sintaxe dele: o que eu coloco na FOR EACH <tipo conteúdo> IN <tipo de conteúdo>.
Abraços,
Paulo - Jacareí/SP
Comando FOR EACH...IN...NEXT
Enviado: 22 Set 2016 17:03
por JoséQuintas
Tem todos os exemplos aí.
Talvez mais simples se pensar nisso em português:
o que está em minúsculo, pode usar o nome que quiser/precisar.
Comando FOR EACH...IN...NEXT
Enviado: 23 Set 2016 09:49
por asimoes
Muito bom Quintas, excelente recurso.
Comando FOR EACH...IN...NEXT
Enviado: 23 Set 2016 22:13
por wmanesco
Acho interessante ressaltar o uso em hash que acho bem bacana também:
Código: Selecionar todos
PROCEDURE Teste()
LOCAL hTeste := HB_Hash()
LOCAL element
hTeste["a"] := 1
hTeste["b"] := 2
FOR EACH element IN hTeste
? element // valor do componente, neste caso 1 e 2
? element:__enumKey() //neste caso é apresentado a chave da hash, neste caso "a" e "b"
NEXT
RETURN
Comando FOR EACH...IN...NEXT
Enviado: 25 Set 2016 00:02
por JoséQuintas
Olhem este:
Código: Selecionar todos
cDest := XmlNode( cDest, "enderDest" )
::aDest[ "xLgr" ] := XmlNode( cDest, "xLgr" )
::aDest[ "nro" ] := XmlNode( cDest, "nro" )
::aDest[ "xCpl" ] := XmlNode( cDest, "xCpl" )
::aDest[ "xBairro" ] := XmlNode( cDest, "xBairro" )
::aDest[ "cMun" ] := XmlNode( cDest, "cMun" )
::aDest[ "xMun" ] := XmlNode( cDest, "xMun" )
::aDest[ "UF" ] := XmlNode( cDest, "UF" )
::aDest[ "CEP" ] := XmlNode( cDest, "CEP" )
::aDest[ "cPais" ] := XmlNode( cDest, "cPais" )
::aDest[ "xPais" ] := XmlNode( cDest, "xPais" )
Código: Selecionar todos
cDest := XmlNode( cDest, "enderDest" )
FOR EACH oElement IN { "xLgr", "nro", "xCpl", "xBairro", "cMun", "xMun", "UF", "CEP", "cPais", "xPais" }
::aDest[ oElement ] := XmlNode( cDest, oElement )
NEXT
Comando FOR EACH...IN...NEXT
Enviado: 25 Set 2016 11:38
por asimoes
Quintas,
Esse seu último post foi usando hb_hash()?
Comando FOR EACH...IN...NEXT
Enviado: 25 Set 2016 13:11
por JoséQuintas
Sim, é que é parte de um fonte da hbnfe.
::aDest também é variável de uma classe.
Tem lá na classe