Page 1 of 1
AEVAL multidimentional array
Posted: Tue May 13, 2025 8:54 am
by Marc Vanzegbroeck
Hi,
Is is possible to aeval a multidimentional array, or do I have to make a combination of a loop and aeval.
I want to execute a function on all elements of a multidimentional array.
Thank you
Re: AEVAL multidimentional array
Posted: Tue May 13, 2025 9:06 am
by Antonio Linares
Dear Marc,
How is your array ?
What do you need ?
Re: AEVAL multidimentional array
Posted: Tue May 13, 2025 9:22 am
by Marc Vanzegbroeck
Antonio,
Here is an example of the array. The normal one is much bigger
Code: Select all | Expand
"E1345";"DI";"DIGACQA";"DI";"I_E1345"
"F1305";"GO";"DEVCTLA";"DI";"I_F1305GO
"F1305";"GT";"DEVCTLA";"DI";"I_F1305GT"
I want to perform a function on each element.
For example remove all " at the beginning and end of the element.
Re: AEVAL multidimentional array
Posted: Tue May 13, 2025 9:50 am
by Antonio Linares
AEval( aLines, { | cLine, n | aLines[ n ] := SubStr( cLine, 2 ), aLines[ n ] := SubStr( aLines[ n ], 2, Len( aLines[ n ] ) - 1 ) } )
You can also manage each line as an array:
AEval( aLines, { | cLine, n | aLines[ n ] := hb_ATokens( cLine, ";" ) } )
Re: AEVAL multidimentional array
Posted: Tue May 13, 2025 10:08 am
by Marc Vanzegbroeck
Antonio,
Sorry for the confusion,but the ';' between each element, is not a real ';' , but a separation between element
So the array is in fact
Code: Select all | Expand
{ { ' "E1345" ' , ' "DI" ' , ' "DIGACQA" ' , ' "DI" ' ,' "I_E1345" ' } , {' "F1305" ' , ' "GO" ' ,' "DEVCTLA" ' ,' "DI" ' ,' "I_F1305GO" '} , {' "F1305" ' ,' "GT" ' ,' "DEVCTLA" ' ,' "DI" ' ,' "I_F1305GT" '} }
Re: AEVAL multidimentional array
Posted: Tue May 13, 2025 10:34 am
by Antonio Linares
Then it is simpler:
AEval( aLines, { | aLine, n | AEval( aLine, { | cElement, m | ... } ) } )
Re: AEVAL multidimentional array
Posted: Tue May 13, 2025 10:49 am
by Marc Vanzegbroeck
Thank you Antonio.
Re: AEVAL multidimentional array
Posted: Tue May 13, 2025 1:25 pm
by Marc Vanzegbroeck
Antonio,
I still have a little problem.
I tested it with
Code: Select all | Expand
AEval( aLines, { | aLine, n | AEval( aLine, { | cElement, m | cElement := mcsvremove(cElement) } ) } )
func mcsvremove(vveld)
vveld = alltrim(vveld)
msginfo(vveld) //field with "
if substr(vveld,1,1) = '"'
vveld = substr(vveld,2,len(vveld)-2)
endif
msginfo(vveld) //field without "
return vveld
It execute the mcsvremove() function, but the array is not updated.
If I add a message in mcsvremove(), the funcion removed the "
Re: AEVAL multidimentional array
Posted: Tue May 13, 2025 3:27 pm
by Antonio Linares
Marc,
Do it this way:
Code: Select all | Expand
AEval( aLines, { | aLine, n | AEval( aLine, { | cElement, m | aLines[ n ][ m ] := mcsvremove(cElement) } ) } )
func mcsvremove(vveld)
vveld = alltrim(vveld)
msginfo(vveld) //field with "
if substr(vveld,1,1) = '"'
vveld = substr(vveld,2,len(vveld)-2)
endif
msginfo(vveld) //field without "
return vveld
Re: AEVAL multidimentional array
Posted: Tue May 13, 2025 6:12 pm
by Marc Vanzegbroeck
Antonio,
Then I get this compile-error.
Code: Select all | Expand
Error E0005 Outer codeblock variable is out of reach: 'N'
Re: AEVAL multidimentional array
Posted: Tue May 13, 2025 8:35 pm
by JoséQuintas
Try This
Code: Select all | Expand
FOR EACH aList2 IN aList
FOR EACH xItem IN aList2
callfunction( @xItem )
NEXT
NEXT