Página 1 de 1
Ascan array multdimensional
Enviado: 16 Fev 2023 10:18
por Itamar M. Lins Jr.
Olá!
aProd := {{'001','MESA'},{'002','CADEIRA'}}
Como eu uso com eficiência o ascan() neste caso para achar o código '0001' ? Tem milhares de código, descrição neste array.
Tive olhando com "for next"
IF AScan(aProd,... ?
Saudações,
Itamar M. Lins Jr.
Ascan array multdimensional
Enviado: 16 Fev 2023 11:01
por Itamar M. Lins Jr.
Olá!
Eu respondo para mim mesmo!
Código: Selecionar todos
function main
local cProd:='001', aProd := {{'001','MESA'},{'002','CADEIRA'},{'003','MARTELO'}}
? len(aProd)
? aProd[1][1]
? aProd[2][1]
? aProd[3][1]
? ascan( aProd, {|e|e[1] == cProd} )
return .t.
Saudações,
Itamar M. Lins Jr.
Ascan array multdimensional
Enviado: 19 Fev 2023 17:18
por JoséQuintas
Tem certeza disso?
codeblock não seria outra posição?
Por coincidência acabei neste post justamente procurando sobre isso.
Ascan array multdimensional
Enviado: 19 Fev 2023 17:25
por JoséQuintas
Manual do Harbour está confuso.
Ascan array multdimensional
Enviado: 19 Fev 2023 17:30
por JoséQuintas
Manual do Clipper
Mas não define se o retorno do codeblock é .T./.F. ou valor
Ascan array multdimensional
Enviado: 19 Fev 2023 17:35
por JoséQuintas
Olhando o do Harbour de novo:
Na descrição diz ok sobre o uso de codeblock.
Mas o exemplo usa diferente.
Ascan array multdimensional
Enviado: 19 Fev 2023 17:36
por Itamar M. Lins Jr.
Olá!
Tem certeza disso?
O teste fala por si. Já fiz aqui no SPED e deu certo...Quer dizer aparentemente está ok.
Saudações,
Itamar M. Lins Jr.
Ascan array multdimensional
Enviado: 19 Fev 2023 17:43
por JoséQuintas
Pois é.... fazendo igual o exemplo não funciona.
Mas assim funciona
Lembro de existir essa diferença, mas não lembro exatamente porque.
Uma prova de que isso existiu é o próprio exemplo.
Ascan array multdimensional
Enviado: 19 Fev 2023 17:50
por JoséQuintas
Talvez confusão com ASort().... mas coincidência confundirem no exemplo.
Nota: apesar de eu ter testado hb_AScan(), AScan() tem o mesmo resultado.
Ascan array multdimensional
Enviado: 19 Fev 2023 17:52
por Itamar M. Lins Jr.
Olá!
Código: Selecionar todos
C:\fontes\exemplos>hbrun ascan.prg
hbshell: Atenção: Não é possível encontrar o 3rd/expat/expat.hbc (referenciado
por C:\HB32\contrib\hbexpat\hbexpat.hbc)
3
001
002
003
1
0
C:\fontes\exemplos>
Aqui está ok
Código: Selecionar todos
function main
local cProd:='001', aProd := {{'001','MESA'},{'002','CADEIRA'},{'003','MARTELO'}}
? len(aProd)
? aProd[1][1]
? aProd[2][1]
? aProd[3][1]
? ascan( aProd, {|e|e[1] == cProd} )
? ascan( aProd, 'MARTELO' )
return .t.
Saudações,
Itamar M. Lins Jr.
Ascan array multdimensional
Enviado: 22 Fev 2023 14:32
por carlaoonline
https://doc.alaska-software.com/content ... ascan.html
Localiza-> Search in an array na pagina
Nada que os mestres não saibam (tem exemplo igual mais acima citado), mas só pra constar mais um site de help para as pessoas normais.
Ascan array multdimensional
Enviado: 22 Fev 2023 14:42
por Itamar M. Lins Jr.
Olá!
Pois é! Da forma que mostrei é MUITO mais simples de entender e está correto.
No exemplo, do xBase++ Já tem adirectory() ai a pessoa não sabe como é estrutura do array de retorno... Tem mais um arquivo .CH para entender... etc..
Muito bla, bla, bla... Para ensinar pesquisa com codeblock.
Saudações,
Itamar M. Lins Jr.
Ascan array multdimensional
Enviado: 22 Fev 2023 14:52
por Itamar M. Lins Jr.
Olá!
Este exemplo aqui está errado!
Código: Selecionar todos
// The example shows a simple routine that translates
// strings to numeric IDs and vice versa using a
// two-dimensional array.
#define ID_APPLES 100
#define ID_PEARS 200
#define ID_ORANGES 300
PROCEDURE Main
CLS
? Translate( ID_APPLES ) // result: Apples
? Translate( "Oranges" ) // result: 300
RETURN
FUNCTION Translate( xValue )
STATIC saTable := { ;
{ ID_APPLES , "Apples" }, ;
{ ID_PEARS , "Pears" }, ;
{ ID_ORANGES, "Oranges" } ;
}
LOCAL i := AScan( saTable, xValue )
IF i == 0
RETURN NIL
ENDIF
RETURN IIF( Valtype(xValue)=="C", saTable[i,1], saTable[i,2] )
Não funciona no Harbour. O retorno no Harbour é NIl, NIL (não acha)
Saudações,
Itamar M. Lins Jr.
Ascan array multdimensional
Enviado: 09 Mar 2023 15:50
por Itamar M. Lins Jr.
Olá!
Usando asort em um vetor !
Código: Selecionar todos
function main
local n, cProd:='001', aProd := {{'003','MESA'},{'001','CADEIRA'},{'002','MARTELO'}}
? len(aProd)
? aProd[1][1]
? aProd[2][1]
? aProd[3][1]
? ascan( aProd, {|e|e[1] = cProd} )
? asort(aProd,,,{|x,y|x[1]<y[1]})
for n := 1 to len(aProd)
? aProd[n][1]
next
return .t.
Saudações,
Itamar M. Lins Jr.
Ascan array multdimensional
Enviado: 09 Mar 2023 18:59
por JoséQuintas
Código: Selecionar todos
// The example shows a simple routine that translates
// strings to numeric IDs and vice versa using a
// two-dimensional array.
#define ID_APPLES 100
#define ID_PEARS 200
#define ID_ORANGES 300
PROCEDURE Main
CLS
? Translate( ID_APPLES ) // result: Apples
? Translate( "Oranges" ) // result: 300
RETURN
FUNCTION Translate( xValue )
LOCAL aList := { ;
{ ID_APPLES , "Apples" }, ;
{ ID_PEARS , "Pears" }, ;
{ ID_ORANGES, "Oranges" } ;
}
LOCAL nPos
IF ValType( xValue ) == "N"
nPos := AScan( aList, { | e | e[ 1 ] == xValue } )
ELSE
nPos := ASCan( aList, { | e | e[ 2 ] == xValue } )
ENDIF
IF nPos == 0
RETURN NIL
ENDIF
RETURN aList[ nPos, iif( Valtype( xValue ) == "C", 1, 2 ) ]
Corrigido, com nomes de variável simples, e sei lá se precisa ficar gastando memória com STATIC só pra isso.