Ascan array multdimensional

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Ascan array multdimensional

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Ascan array multdimensional

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ascan array multdimensional

Mensagem por JoséQuintas »

Tem certeza disso?
codeblock não seria outra posição?
Por coincidência acabei neste post justamente procurando sobre isso.
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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ascan array multdimensional

Mensagem por JoséQuintas »

Manual do Harbour está confuso.
ascan1.png
ascan2.png
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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ascan array multdimensional

Mensagem por JoséQuintas »

Manual do Clipper
ascan3.png
Mas não define se o retorno do codeblock é .T./.F. ou valor
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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ascan array multdimensional

Mensagem por JoséQuintas »

ascan4.png
Olhando o do Harbour de novo:
Na descrição diz ok sobre o uso de codeblock.
Mas o exemplo usa diferente.
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/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Ascan array multdimensional

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ascan array multdimensional

Mensagem por JoséQuintas »

Pois é.... fazendo igual o exemplo não funciona.
ascan5.png
Mas assim funciona
ascan6.png
Lembro de existir essa diferença, mas não lembro exatamente porque.
Uma prova de que isso existiu é o próprio exemplo.
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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ascan array multdimensional

Mensagem por JoséQuintas »

ascan7.png
Talvez confusão com ASort().... mas coincidência confundirem no exemplo.

Nota: apesar de eu ter testado hb_AScan(), AScan() tem o mesmo resultado.
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/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Ascan array multdimensional

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
carlaoonline
Usuário Nível 3
Usuário Nível 3
Mensagens: 190
Registrado em: 24 Ago 2014 22:38
Localização: Porto Alegre-RS

Ascan array multdimensional

Mensagem 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.
Editado pela última vez por Itamar M. Lins Jr. em 22 Fev 2023 14:44, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ url ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r0
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Ascan array multdimensional

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Ascan array multdimensional

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Ascan array multdimensional

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ascan array multdimensional

Mensagem 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.
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/
Responder