Let me first make sure if I understood you requirements properly.
You have a field in your dbf where different sizes are recorded as a list of numeric values.
For example, like this:
"51,52,53,54,55,56,57,58,59 "
These values correspond the sizes:
"L,M,S,XL,XXL,4XL,5XL,XS,XXXL"
You want to read the values in this order: (in other words sort these values )
"XS,S,M,L,XL,XXL,XXXL,4XL,5XL"
for further processing.
Is my understanding correct?
If so we can do like this:
#include "fivewin.ch"
function Main()
local cFieldOrder := "L,M,S,XL,XXL,4XL,5XL,XS,XXXL"
local cReadOrder := "XS,S,M,L,XL,XXL,XXXL,4XL,5XL"
local aFieldOrder := HB_ATokens( cFieldOrder, "," )
local aReadOrder := HB_ATokens( cReadOrder, "," )
local cFieldValue := "51,52,53,54,55,56,57,58,59 "
local aRead
AEval( aReadOrder, { |u,i| aReadOrder[ i ] := AScan( aFieldOrder, u ) } )
aRead := ReadValues( cFieldValue, aReadOrder )
? aRead // -> {"58","53","52","51","54","55","59","56","57"}
? FW_ArrayAsList( aRead ) // -> "58,53,52,51,54,55,59,56,57"
return nil
function ReadValues( cFieldValue, aReadOrder )
local aValue := HB_ATokens( TRIM( cFieldValue ), "," )
local aRead := Array( Len( aReadOrder ) )
AEval( aRead, { |u,i| aRead[ i ] := aValue[ aReadOrder[ i ] ] } )
return aRead
You can do anything with the values read in the order you want.
If you want to save the values in a different field in a dbf, you can do
FIELD->NEWSIZE := FW_ArrayAsList( aRead )
If your requirement is something different, please let me know.