FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour start at the end and go back in an array - RESOLVED --
Posts: 7317
Joined: Thu Oct 18, 2012 07:17 PM
start at the end and go back in an array - RESOLVED --
Posted: Sat May 28, 2022 11:13 AM

I have an array and I make this operation from record 1 to 10087

AEval( aData, { |a| If( a[ nPos1 ] == numero .or. ;
a[ nPos2 ] == numero .or. ;
a[ nPos3 ] == numero .or. ;
a[ nPos4 ] == numero .or. ;
a[ nPos5 ] == numero , nCount++, nil ) } )

Now I wish start at the end and go back
basically I want go to bottom() and make to skip (-1) up to a certain record
How I can resolve ?

Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)

I use : FiveWin for Harbour March-April 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Re: start at the end and go back in an array
Posted: Sat May 28, 2022 01:35 PM

Silvio,
Just a question.
Why do you use AEVAL and not just FOR NEXT?
I think AEVAL is only for ARRAY professionals.
And it doesn't bring anything except shorter code that only occasional users don't understand right away.
Best regards,
Otto

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: start at the end and go back in an array
Posted: Sat May 28, 2022 04:03 PM

Dear Silvio,

Same as we have a RAScan() we should have a RAEval(). It is not difficult to implement it and we can do it :-)
Unless there is a function AReverse() (also missing) that I am not aware of.

Dear Otto,

AEval(), AScan(), etc. are much faster than using for ... next loops as they don't use pcode for the loops.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: start at the end and go back in an array
Posted: Sat May 28, 2022 06:19 PM
Dear Silvio,

Mr. Rao has already implemented RAEval() in a very simple way :-) To be included in the next FWH build

Code (fw): Select all Collapse
function FW_RAEval( aArray, bBlock, nStart, nCount )

   local nPos  := IfNil( nStart, Len( aArray ) )

   RAScan( aArray, { |u| Eval( bBlock, u, nPos ), nPos--, .f. }, nStart, nCount )

return aArray
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 7317
Joined: Thu Oct 18, 2012 07:17 PM
Re: start at the end and go back in an array
Posted: Sat May 28, 2022 07:37 PM
Antonio Linares wrote:Dear Silvio,

Mr. Rao has already implemented RAEval() in a very simple way :-) To be included in the next FWH build

Code (fw): Select all Collapse
function FW_RAEval( aArray, bBlock, nStart, nCount )

   local nPos  := IfNil( nStart, Len( aArray ) )

   RAScan( aArray, { |u| Eval( bBlock, u, nPos ), nPos--, .f. }, nStart, nCount )

return aArray


Antonio,
I not Understood how I can make to converte my function and use an array instead dbf I explain you

My Function ( it it slows down enough)

Code (fw): Select all Collapse
Function Ritardo(numero,nrecord,nRuota)
        local oDbfRit,cond
        local r1,r2,r3,r4,r5
        local nritardo:=0
        local nOldArea := select()
        local cDir:=".\data\"

        do case
      case nRuota = 1
         r1:= "BA1"
         r2:= "BA2"
         r3:= "BA3"
         r4:= "BA4"
         r5:= "BA5"
            case nRuota = 2
         r1:= "CA1"
         r2:= "CA2"
         r3:= "CA3"
         r4:= "CA4"
         r5:= "CA5"
           case nRuota = 3
         r1:= "FI1"
         r2:= "FI2"
         r3:= "FI3"
         r4:= "FI4"
         r5:= "FI5"
          case nRuota = 4
         r1:= "GE1"
         r2:= "GE2"
         r3:= "GE3"
         r4:= "GE4"
         r5:= "GE5"
       case nRuota = 5
         r1:= "MI1"
         r2:= "MI2"
         r3:= "MI3"
         r4:= "MI4"
         r5:= "MI5"
         case nRuota = 6
         r1:= "NA1"
         r2:= "NA2"
         r3:= "NA3"
         r4:= "NA4"
         r5:= "NA5"
       case nRuota = 7
         r1:= "PA1"
         r2:= "PA2"
         r3:= "PA3"
         r4:= "PA4"
         r5:= "PA5"
      case nRuota = 8
         r1:= "RM1"
         r2:= "RM2"
         r3:= "RM3"
         r4:= "RM4"
         r5:= "RM5"
       case nRuota = 9
         r1:= "TO1"
         r2:= "TO2"
         r3:= "TO3"
         r4:= "TO4"
         r5:= "TO5"
      case nRuota = 10
         r1:= "VE1"
         r2:= "VE2"
         r3:= "VE3"
         r4:= "VE4"
         r5:= "VE5"
      case nRuota = 11
         r1:= "NZ1"
         r2:= "NZ2"
         r3:= "NZ3"
         r4:= "NZ4"
         r5:= "NZ5"
      endcase

       oDbfRit:= TDatabase():Open( , cDir+"lotto", "DBFCDX", .T. )
       oDbfRit:setorder(0)
       oDbfRit:goto(nRecord-1)


      Do while .not. oDbfRit:eof()

                cond:= oDbfRit:&r1  = numero .OR. ;
                       oDbfRit:&r2  = numero .OR. ;
                       oDbfRit:&r3  = numero .OR. ;
                       oDbfRit:&r4  = numero .OR. ;
                       oDbfRit:&r5  = numero
                If cond

                   exit
                else
                    nritardo:= nritardo + 1
                endif
                oDbfRit:skip(-1)

             enddo
             oDbfRit:close()
             select(nOldArea )
      return  nritardo
//-------------------------------------------------------------//



With array ( but this cycle always advances one record)

Function Delay(aData, numero, nWheel)
local nPos1,nPos2,nPos3,nPos4,nPos5

Do case
case nWheel = 1
nPos1:= 3
nPos2:= 4
nPos3:= 5
nPos4:= 6
nPos5:= 7
case nWheel = 2
nPos1:= 8
nPos2:= 9
nPos3:= 10
nPos4:= 11
nPos5:= 12
case nWheel = 3
nPos1:= 13
nPos2:= 14
nPos3:= 15
nPos4:= 16
nPos5:= 17
case nWheel = 4
nPos1:= 18
nPos2:= 19
nPos3:= 20
nPos4:= 21
nPos5:= 22
case nWheel = 5
nPos1:= 23
nPos2:= 24
nPos3:= 25
nPos4:= 26
nPos5:= 27
case nWheel = 6
nPos1:= 28
nPos2:= 29
nPos3:= 30
nPos4:= 31
nPos5:= 32

case nWheel = 7
nPos1:= 33
nPos2:= 34
nPos3:= 35
nPos4:= 36
nPos5:= 37
case nWheel = 8
nPos1:= 38
nPos2:= 39
nPos3:= 40
nPos4:= 41
nPos5:= 42
case nWheel = 9
nPos1:= 43
nPos2:= 44
nPos3:= 45
nPos4:= 46
nPos5:= 47
case nWheel = 10
nPos1:= 48
nPos2:= 49
nPos3:= 50
nPos4:= 51
nPos5:= 52
case nWheel = 11
nPos1:= 53
nPos2:= 54
nPos3:= 55
nPos4:= 56
nPos5:= 57
Endcase

but this cycle always advances one record
How I can to go back ? i.e. skip -1

AEval( aData, { |a| If( a[ nPos1 ] == numero .or. ;
a[ nPos2 ] == numero .or. ;
a[ nPos3 ] == numero .or. ;
a[ nPos4 ] == numero .or. ;
a[ nPos5 ] == numero , nCount++, nil ) } )

return nCount
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)

I use : FiveWin for Harbour March-April 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Re: start at the end and go back in an array
Posted: Sun May 29, 2022 05:21 PM

Dear Antonio,

RAScan( )
R - What does the abbreviation stand for?

Best regards,
Otto

Posts: 218
Joined: Mon Feb 07, 2022 09:54 PM
Re: start at the end and go back in an array
Posted: Sun May 29, 2022 07:58 PM

I think it's for 'reverse'.

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: start at the end and go back in an array
Posted: Sun May 29, 2022 08:20 PM

Yes, Detlef is correct. It stands for "reverse"

The same way, RAEval() would stand for reverse AEval()

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 7317
Joined: Thu Oct 18, 2012 07:17 PM
Re: start at the end and go back in an array
Posted: Mon May 30, 2022 08:03 AM
Antonio Linares wrote:Yes, Detlef is correct. It stands for "reverse"

The same way, RAEval() would stand for reverse AEval()


Antonio,
the function run bad or I not set right ...

I Insert also the old function Ritardo() made with dbf ( I send you the new lotto.dbf)

the number delay must be 24 as the result of old function Ritardo()

the new function Rit () made with fw_eval not run ok

the code
Code (fw): Select all Collapse
#include "fivewin.ch"

Function test()
local oDbf,aDatadbf
local number,nRecord
local nDelay
local cDir:=".\data\"

   oDbf:=TDatabase():Open( , cDir+"lotto", "DBFCDX", .T. )
   oDbf:setorder(1)
   oDbf:gobottom()
   nrecord:=oDbf:recno() //for old function

   aDataDbf:=oDbf:DbfToArray()
   number:=oDbf:ba1

   //New with array
   nDelay:= Rit( aDataDbf, number, 1, nrecord )

   ?nDelay, "New array function"

 // Old with dbf
   nDelay:= Ritardo(number,nrecord,1)

?nDelay,"Old right function"

Return nil

Function Rit( aData, numero, nWheel, nstart )
   local nCount   := 0
   local nPos1,nPos2,nPos3,nPos4,nPos5

   Do case
     case  nWheel = 1
        nPos1:= 3
        nPos2:= 4
        nPos3:= 5
        nPos4:= 6
        nPos5:= 7
     case  nWheel = 2
        nPos1:= 8
        nPos2:= 9
        nPos3:= 10
        nPos4:= 11
        nPos5:= 12
    case  nWheel = 3
        nPos1:= 13
        nPos2:= 14
        nPos3:= 15
        nPos4:= 16
        nPos5:= 17
    case  nWheel = 4
        nPos1:= 18
        nPos2:= 19
        nPos3:= 20
        nPos4:= 21
        nPos5:= 22
     case  nWheel = 5
        nPos1:= 23
        nPos2:= 24
        nPos3:= 25
        nPos4:= 26
        nPos5:= 27
    case  nWheel = 6
        nPos1:= 28
        nPos2:= 29
        nPos3:= 30
        nPos4:= 31
        nPos5:= 32

    case  nWheel = 7
        nPos1:= 33
        nPos2:= 34
        nPos3:= 35
        nPos4:= 36
        nPos5:= 37
    case  nWheel = 8
        nPos1:= 38
        nPos2:= 39
        nPos3:= 40
        nPos4:= 41
        nPos5:= 42
      case  nWheel = 9
        nPos1:= 43
        nPos2:= 44
        nPos3:= 45
        nPos4:= 46
        nPos5:= 47
    case  nWheel = 10
        nPos1:= 48
        nPos2:= 49
        nPos3:= 50
        nPos4:= 51
        nPos5:= 52
     case  nWheel = 11
        nPos1:= 53
        nPos2:= 54
        nPos3:= 55
        nPos4:= 56
        nPos5:= 57
     Endcase

 array:=  FW_RAEval( aData, { |a| If( a[ nPos1 ]   == numero .or. ;
                           a[ nPos2 ] == numero .or. ;
                           a[ nPos3 ] == numero .or. ;
                           a[ nPos4 ] == numero .or. ;
                           a[ nPos5 ] == numero  , ,nCount++) }, nstart )

 xbrowser array
   return nCount





function FW_RAEval( aArray, bBlock, nStart, nCount )

   local nPos  := IfNil( nStart, Len( aArray ) )

   RAScan( aArray, { |u| Eval( bBlock, u, nPos ), nPos--, .f. }, nStart, nCount )

   return aArray



 //OLD FUNCTION
 Function Ritardo(numero,nrecord,nRuota)
        local oDbfRit,cond
        local r1,r2,r3,r4,r5
        local nritardo:=0
        local nOldArea := select()
        local cDir:=".\data\"

        do case
      case nRuota = 1
         r1:= "BA1"
         r2:= "BA2"
         r3:= "BA3"
         r4:= "BA4"
         r5:= "BA5"
            case nRuota = 2
         r1:= "CA1"
         r2:= "CA2"
         r3:= "CA3"
         r4:= "CA4"
         r5:= "CA5"
           case nRuota = 3
         r1:= "FI1"
         r2:= "FI2"
         r3:= "FI3"
         r4:= "FI4"
         r5:= "FI5"
          case nRuota = 4
         r1:= "GE1"
         r2:= "GE2"
         r3:= "GE3"
         r4:= "GE4"
         r5:= "GE5"
       case nRuota = 5
         r1:= "MI1"
         r2:= "MI2"
         r3:= "MI3"
         r4:= "MI4"
         r5:= "MI5"
         case nRuota = 6
         r1:= "NA1"
         r2:= "NA2"
         r3:= "NA3"
         r4:= "NA4"
         r5:= "NA5"
       case nRuota = 7
         r1:= "PA1"
         r2:= "PA2"
         r3:= "PA3"
         r4:= "PA4"
         r5:= "PA5"
      case nRuota = 8
         r1:= "RM1"
         r2:= "RM2"
         r3:= "RM3"
         r4:= "RM4"
         r5:= "RM5"
       case nRuota = 9
         r1:= "TO1"
         r2:= "TO2"
         r3:= "TO3"
         r4:= "TO4"
         r5:= "TO5"
      case nRuota = 10
         r1:= "VE1"
         r2:= "VE2"
         r3:= "VE3"
         r4:= "VE4"
         r5:= "VE5"
      case nRuota = 11
         r1:= "NZ1"
         r2:= "NZ2"
         r3:= "NZ3"
         r4:= "NZ4"
         r5:= "NZ5"
      endcase

       oDbfRit:= TDatabase():Open( , cDir+"lotto", "DBFCDX", .T. )
       oDbfRit:setorder(0)
       oDbfRit:goto(nRecord-1)


      Do while .not. oDbfRit:eof()

                cond:= oDbfRit:&r1  = numero .OR. ;
                       oDbfRit:&r2  = numero .OR. ;
                       oDbfRit:&r3  = numero .OR. ;
                       oDbfRit:&r4  = numero .OR. ;
                       oDbfRit:&r5  = numero
                If cond

                   exit
                else
                    nritardo:= nritardo + 1
                 endif

                oDbfRit:skip(-1)

             enddo
             oDbfRit:close()
             select(nOldArea )
      return  nritardo
//-------------------------------------------------------------//


probable I not understood how run it ...
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)

I use : FiveWin for Harbour March-April 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
Posts: 218
Joined: Mon Feb 07, 2022 09:54 PM
Re: start at the end and go back in an array
Posted: Mon May 30, 2022 02:30 PM
Hi Silvo,

I have no solution for your problem because for the moment I've not time enough to be occupied with your complex materials.
But to code more efficient I would replace
Do case
case nWheel = 1
nPos1:= 3
nPos2:= 4
nPos3:= 5
nPos4:= 6
nPos5:= 7
case nWheel = 2
nPos1:= 8
nPos2:= 9
nPos3:= 10
nPos4:= 11
nPos5:= 12
case nWheel = 3
nPos1:= 13
nPos2:= 14
nPos3:= 15
nPos4:= 16
nPos5:= 17
case nWheel = 4
nPos1:= 18
nPos2:= 19
nPos3:= 20
nPos4:= 21
nPos5:= 22
case nWheel = 5
nPos1:= 23
nPos2:= 24
nPos3:= 25
nPos4:= 26
nPos5:= 27
case nWheel = 6
nPos1:= 28
nPos2:= 29
nPos3:= 30
nPos4:= 31
nPos5:= 32

case nWheel = 7
nPos1:= 33
nPos2:= 34
nPos3:= 35
nPos4:= 36
nPos5:= 37
case nWheel = 8
nPos1:= 38
nPos2:= 39
nPos3:= 40
nPos4:= 41
nPos5:= 42
case nWheel = 9
nPos1:= 43
nPos2:= 44
nPos3:= 45
nPos4:= 46
nPos5:= 47
case nWheel = 10
nPos1:= 48
nPos2:= 49
nPos3:= 50
nPos4:= 51
nPos5:= 52
case nWheel = 11
nPos1:= 53
nPos2:= 54
nPos3:= 55
nPos4:= 56
nPos5:= 57
Endcase

with these 5 lines:
Code (fw): Select all Collapse
       nPos1 := ( nWheel - 1 ) * 5 + 3
      nPos2 := ( nWheel - 1 ) * 5 + 4
      nPos3 := ( nWheel - 1 ) * 5 + 5
      nPos4 := ( nWheel - 1 ) * 5 + 6
      nPos5 := ( nWheel - 1 ) * 5 + 7

Regards, Detlef
Posts: 7317
Joined: Thu Oct 18, 2012 07:17 PM
Re: start at the end and go back in an array
Posted: Mon May 30, 2022 02:40 PM
the frequency run ok

Code (fw): Select all Collapse
Function freq( aData, numero, nWheel )
   local nCount   := 0
   local nPos1,nPos2,nPos3,nPos4,nPos5

      nPos1 := ( nWheel - 1 ) * 5 + 3
      nPos2 := ( nWheel - 1 ) * 5 + 4
      nPos3 := ( nWheel - 1 ) * 5 + 5
      nPos4 := ( nWheel - 1 ) * 5 + 6
      nPos5 := ( nWheel - 1 ) * 5 + 7

   AEval( aData, { |a| If( a[ nPos1 ]   == numero .or. ;
                           a[ nPos2 ] == numero .or. ;
                           a[ nPos3 ] == numero .or. ;
                           a[ nPos4 ] == numero .or. ;
                           a[ nPos5 ] == numero  , nCount++, nil ) } )

   return nCount


the delay is the inverse from bottom skip -1 to where it found the number

With dbf the function is
Code (fw): Select all Collapse
Function Ritardo(numero,nrecord,nRuota)
        local oDbfRit,cond
        local r1,r2,r3,r4,r5
        local nritardo:=0
        local nOldArea := select()
        local cDir:=".\data\"

        do case
      case nRuota = 1
         r1:= "BA1"
         r2:= "BA2"
         r3:= "BA3"
         r4:= "BA4"
         r5:= "BA5"
            case nRuota = 2
         r1:= "CA1"
         r2:= "CA2"
         r3:= "CA3"
         r4:= "CA4"
         r5:= "CA5"
           case nRuota = 3
         r1:= "FI1"
         r2:= "FI2"
         r3:= "FI3"
         r4:= "FI4"
         r5:= "FI5"
          case nRuota = 4
         r1:= "GE1"
         r2:= "GE2"
         r3:= "GE3"
         r4:= "GE4"
         r5:= "GE5"
       case nRuota = 5
         r1:= "MI1"
         r2:= "MI2"
         r3:= "MI3"
         r4:= "MI4"
         r5:= "MI5"
         case nRuota = 6
         r1:= "NA1"
         r2:= "NA2"
         r3:= "NA3"
         r4:= "NA4"
         r5:= "NA5"
       case nRuota = 7
         r1:= "PA1"
         r2:= "PA2"
         r3:= "PA3"
         r4:= "PA4"
         r5:= "PA5"
      case nRuota = 8
         r1:= "RM1"
         r2:= "RM2"
         r3:= "RM3"
         r4:= "RM4"
         r5:= "RM5"
       case nRuota = 9
         r1:= "TO1"
         r2:= "TO2"
         r3:= "TO3"
         r4:= "TO4"
         r5:= "TO5"
      case nRuota = 10
         r1:= "VE1"
         r2:= "VE2"
         r3:= "VE3"
         r4:= "VE4"
         r5:= "VE5"
      case nRuota = 11
         r1:= "NZ1"
         r2:= "NZ2"
         r3:= "NZ3"
         r4:= "NZ4"
         r5:= "NZ5"
      endcase

       oDbfRit:= TDatabase():Open( , cDir+"lotto", "DBFCDX", .T. )
       oDbfRit:setorder(0)
       oDbfRit:goto(nRecord-1)


      Do while .not. oDbfRit:eof()

                cond:= oDbfRit:&r1  = numero .OR. ;
                       oDbfRit:&r2  = numero .OR. ;
                       oDbfRit:&r3  = numero .OR. ;
                       oDbfRit:&r4  = numero .OR. ;
                       oDbfRit:&r5  = numero
                If cond

                   exit
                else
                    nritardo:= nritardo + 1
                endif
                oDbfRit:skip(-1)

             enddo
             oDbfRit:close()
             select(nOldArea )
      return  nritardo
//-------------------------------------------------------------//


I wish create if with array because can be also more fast
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)

I use : FiveWin for Harbour March-April 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Re: start at the end and go back in an array
Posted: Mon May 30, 2022 03:03 PM

Why don't you post theARRAY or the database?

Posts: 7317
Joined: Thu Oct 18, 2012 07:17 PM
Re: start at the end and go back in an array
Posted: Mon May 30, 2022 03:30 PM
I send you to another post the array of this year




Code (fw): Select all Collapse
function aData_array()
return ;
{  {"22 ",SToD("20220219"),23,36,68,10,49,29,28,21,50,7,27,30,20,25,62,3,81,22,90,13,14,22,31,61,62,14,71,46,21,74,82,59,90,79,83,82,15,87,75,51,82,76,74,68,24,77,6,7,26,55,15,71,77,36,43} ;
,  {"23 ",SToD("20220222"),35,83,47,74,62,43,44,42,71,31,88,36,32,28,45,14,11,21,24,76,7,52,64,57,24,6,71,35,53,23,77,21,55,47,65,55,89,19,76,75,81,60,63,44,31,10,72,80,63,39,21,66,28,48,45} ;
,  {"24 ",SToD("20220224"),46,74,32,68,79,82,25,51,79,44,75,65,63,66,43,61,2,75,65,24,64,12,60,56,34,57,64,84,53,42,41,21,17,76,68,36,33,54,14,38,3,87,29,13,15,67,11,53,89,71,80,27,63,86,11} ;
,  {"25 ",SToD("20220226"),87,47,69,31,79,56,32,20,21,19,56,84,15,13,37,24,5,69,39,21,89,36,54,55,12,58,40,72,78,14,63,39,9,32,15,28,46,11,68,29,24,85,42,19,67,13,89,72,88,56,31,33,54,21,47} ;
,  {"26 ",SToD("20220301"),61,68,49,75,71,24,54,52,71,79,54,72,60,46,75,89,69,53,74,76,88,30,22,48,1,5,17,88,44,60,78,2,51,5,8,72,67,24,34,82,49,30,51,11,87,14,31,60,25,21,62,1,16,43,12} ;
,  {"27 ",SToD("20220303"),11,57,56,66,60,17,5,4,14,81,48,72,74,59,39,26,90,57,70,59,18,33,52,28,38,59,50,18,9,12,47,29,16,55,73,75,90,85,45,82,1,2,68,79,16,52,48,46,37,81,35,45,20,44,31} ;
,  {"28 ",SToD("20220305"),89,26,36,1,68,20,39,40,11,41,65,15,30,78,62,83,48,81,56,28,6,76,32,12,26,16,32,69,14,38,71,63,87,54,12,36,49,71,81,76,35,6,70,42,59,18,46,41,76,33,22,75,54,76,14} ;
,  {"29 ",SToD("20220308"),8,62,44,12,79,33,29,28,74,64,30,24,2,55,36,71,28,34,64,60,40,20,82,85,57,6,69,54,70,24,36,42,68,21,10,36,77,88,42,27,81,6,2,16,25,82,39,17,51,43,15,9,37,69,54} ;
,  {"30 ",SToD("20220310"),73,53,45,37,87,24,69,19,84,73,61,80,45,29,40,27,28,42,87,49,2,88,6,4,75,29,4,50,33,83,14,30,77,72,42,3,48,68,39,43,23,7,77,84,89,90,84,78,56,41,16,40,22,83,62} ;
,  {"31 ",SToD("20220312"),7,17,77,76,86,86,22,19,65,40,55,63,14,80,33,17,35,85,9,7,52,18,12,47,1,11,49,21,72,55,21,2,81,50,61,27,53,77,57,49,62,87,76,24,35,90,65,56,74,31,71,51,20,79,77} ;
,  {"32 ",SToD("20220315"),49,27,37,45,57,23,34,31,78,52,18,62,1,75,23,6,28,76,41,75,48,3,13,14,67,74,23,51,37,35,89,59,60,58,67,40,42,24,65,10,38,12,59,65,64,41,29,32,10,26,2,31,11,14,58} ;
,  {"33 ",SToD("20220317"),10,17,28,19,87,75,26,52,22,20,66,7,45,59,17,85,4,41,36,78,61,55,9,56,49,41,68,10,27,54,83,49,7,31,10,56,66,40,23,47,35,79,49,51,66,48,1,37,16,86,49,79,22,3,30} ;
,  {"34 ",SToD("20220319"),48,35,64,14,38,90,73,42,66,46,6,51,68,41,64,63,13,25,75,65,67,2,38,18,40,25,64,66,82,7,10,69,43,51,62,74,55,29,28,45,78,3,70,50,55,46,41,64,57,70,45,70,54,35,85} ;
,  {"35 ",SToD("20220322"),22,30,16,88,29,11,21,73,67,59,69,82,44,59,1,27,74,84,45,58,65,77,40,64,30,15,75,59,2,88,89,74,59,56,88,57,36,73,56,72,39,61,78,70,27,7,57,79,52,82,51,79,55,7,41} ;
,  {"36 ",SToD("20220324"),53,45,61,17,56,39,31,72,17,73,73,56,9,37,82,62,35,39,29,3,48,33,9,69,65,26,58,57,30,37,12,85,40,31,67,89,24,79,82,59,44,2,49,74,63,46,76,82,10,23,10,50,6,25,27} ;
,  {"37 ",SToD("20220326"),28,61,20,37,39,52,65,75,35,46,61,34,15,48,67,64,43,7,75,55,61,5,69,40,76,61,49,83,36,67,83,29,74,30,90,7,6,14,23,32,29,84,1,5,20,64,85,22,65,90,28,51,46,27,38} ;
,  {"38 ",SToD("20220329"),54,89,4,57,88,17,2,12,67,31,49,24,52,19,51,61,58,3,1,63,29,56,73,82,11,17,49,31,44,88,83,21,55,29,23,23,42,14,71,87,17,19,81,13,36,41,90,10,74,45,29,18,7,72,61} ;
,  {"39 ",SToD("20220331"),41,29,58,24,50,67,36,21,47,87,63,45,53,58,69,68,80,31,56,87,28,87,10,3,70,71,35,62,36,28,29,87,34,85,25,62,84,11,45,76,3,16,53,72,5,11,75,35,54,73,6,15,80,77,64} ;
,  {"40 ",SToD("20220402"),35,41,38,6,73,11,49,84,54,80,54,1,27,16,57,4,66,74,85,31,35,24,85,80,39,65,62,64,84,74,72,19,47,26,62,29,79,18,75,77,79,42,1,56,32,44,7,5,68,54,54,62,77,85,88} ;
,  {"41 ",SToD("20220405"),28,48,17,46,7,14,78,86,76,21,15,33,4,53,75,44,10,11,65,48,18,52,21,27,51,35,11,42,15,51,62,87,8,68,19,31,5,77,76,60,79,54,6,78,81,10,13,70,44,85,15,19,14,2,24} ;
,  {"42 ",SToD("20220407"),85,29,78,75,87,58,81,80,78,16,20,31,33,46,12,54,79,32,77,40,64,23,61,90,77,84,22,69,54,37,58,17,87,76,70,4,25,66,27,19,90,26,69,65,72,33,43,11,89,79,60,13,71,61,35} ;
,  {"43 ",SToD("20220409"),25,34,68,90,66,54,31,35,17,53,45,44,5,23,34,42,13,89,20,8,54,76,60,48,22,85,15,34,66,68,82,22,83,12,4,41,73,46,15,72,25,10,89,71,65,58,80,59,35,1,33,56,87,30,84} ;
,  {"44 ",SToD("20220412"),61,44,50,41,30,68,4,47,25,78,1,35,2,53,69,90,73,71,82,81,39,21,72,47,38,58,16,86,25,39,5,33,27,53,54,18,20,69,25,78,25,50,41,69,36,10,43,40,82,88,27,17,66,60,34} ;
,  {"45 ",SToD("20220414"),54,72,12,85,58,83,61,41,53,55,87,48,54,49,64,25,42,75,62,43,6,64,8,61,26,71,70,50,54,17,12,41,54,72,80,89,32,80,8,75,22,49,41,5,64,78,8,56,74,14,50,54,56,78,30} ;
,  {"46 ",SToD("20220416"),47,90,39,40,81,16,81,58,67,71,72,30,8,3,88,2,18,15,26,90,3,89,37,2,21,30,14,62,76,2,29,60,14,64,85,5,1,19,18,87,81,61,52,76,31,16,81,87,19,2,18,83,89,75,68} ;
,  {"47 ",SToD("20220419"),36,56,61,73,86,22,85,54,87,26,54,88,61,3,38,23,19,78,15,53,53,20,31,58,65,45,68,18,32,74,76,4,52,30,1,58,51,49,15,2,12,7,22,17,39,27,18,25,66,33,61,81,62,55,26} ;
,  {"48 ",SToD("20220421"),37,14,7,62,49,46,28,76,81,85,51,75,32,21,19,23,11,27,80,67,46,35,23,9,69,83,27,82,2,39,56,38,87,83,29,83,77,44,23,65,44,19,8,62,22,8,84,32,53,35,35,79,27,90,70} ;
,  {"49 ",SToD("20220423"),82,90,20,9,28,47,66,48,68,39,53,17,34,41,22,20,76,53,78,33,30,10,5,75,69,45,54,7,16,83,23,86,24,72,70,85,31,54,10,65,59,19,17,67,38,81,77,34,62,90,1,58,78,4,55} ;
,  {"50 ",SToD("20220426"),58,88,86,50,53,55,13,46,41,11,1,9,52,47,45,7,82,29,70,78,90,40,64,1,31,74,82,33,52,36,54,3,50,32,28,51,3,38,70,32,61,17,52,24,47,86,2,42,59,4,78,87,73,86,9} ;
,  {"51 ",SToD("20220428"),10,85,30,17,50,40,13,14,85,87,68,58,1,53,89,2,17,33,22,20,27,37,38,55,54,51,75,20,78,37,26,59,85,89,88,53,9,84,54,25,41,50,53,22,21,31,24,16,4,27,7,73,5,16,68} ;
,  {"52 ",SToD("20220430"),47,15,76,12,90,42,53,2,20,79,78,75,24,85,67,9,2,37,17,86,65,87,25,81,39,65,85,62,35,66,64,28,55,18,76,5,49,25,24,74,73,16,82,78,80,64,51,11,21,86,25,17,14,70,86} ;
,  {"53 ",SToD("20220503"),80,69,84,73,50,72,62,67,82,9,66,17,7,38,46,37,64,90,88,67,80,72,1,63,18,46,18,83,34,25,35,34,9,76,51,90,54,76,80,71,12,43,22,71,5,38,5,35,66,6,8,12,54,63,80} ;
,  {"54 ",SToD("20220505"),67,48,16,42,87,73,66,61,6,88,39,30,4,78,38,33,67,12,78,6,11,47,37,16,81,32,4,51,25,38,37,16,80,86,8,5,45,21,47,76,27,15,6,25,71,71,86,22,60,50,36,8,24,29,20} ;
,  {"55 ",SToD("20220507"),34,82,52,53,45,74,39,62,12,86,29,14,42,89,52,25,46,90,82,65,57,72,38,29,86,75,63,13,48,69,1,31,15,68,52,31,51,7,90,52,54,28,23,80,31,21,57,54,83,38,28,26,30,55,64} ;
,  {"56 ",SToD("20220510"),49,77,90,85,14,43,55,80,37,22,74,41,89,65,11,76,58,72,49,85,50,33,36,19,74,26,16,47,73,21,67,69,16,37,20,79,72,30,10,58,59,56,55,47,40,69,78,70,30,8,41,45,44,37,18} ;
,  {"57 ",SToD("20220512"),51,26,88,69,60,22,43,14,38,60,25,41,60,57,42,17,3,32,53,63,62,46,3,61,84,22,42,24,52,90,60,41,33,78,18,80,8,25,37,53,4,49,46,38,28,42,9,45,44,79,89,30,58,52,90} ;
,  {"58 ",SToD("20220514"),47,44,62,8,86,64,84,44,20,88,71,63,73,66,59,48,50,5,46,2,49,13,4,69,62,64,11,21,19,48,22,81,31,55,53,9,40,56,33,70,48,41,8,26,85,87,77,19,5,14,73,52,58,66,90} ;
,  {"59 ",SToD("20220517"),16,31,30,50,81,14,4,24,61,87,38,5,28,33,39,80,22,58,35,88,23,72,9,5,1,85,71,82,1,39,50,23,78,39,35,74,83,32,90,1,51,8,59,25,23,21,83,28,62,4,51,31,67,54,62} ;
,  {"60 ",SToD("20220519"),32,21,59,44,90,10,25,53,67,17,7,57,11,1,60,29,51,41,56,48,86,41,37,30,26,33,54,78,41,19,23,13,6,81,56,4,14,61,17,47,3,42,34,69,59,89,13,38,74,65,53,35,85,72,82} ;
,  {"61 ",SToD("20220521"),42,28,73,64,30,48,20,7,34,67,36,27,79,50,87,78,19,87,39,27,84,7,83,66,9,88,8,61,42,26,76,70,56,25,65,66,7,88,1,24,33,21,49,47,22,88,11,65,69,37,38,31,27,22,14} ;
,  {"62 ",SToD("20220524"),81,36,72,84,40,8,80,43,67,64,20,90,58,80,51,40,53,80,62,41,74,62,22,63,35,54,77,76,78,21,50,56,72,42,64,9,88,85,65,6,86,59,21,55,54,77,63,8,10,58,45,79,87,84,72} ;
,  {"63 ",SToD("20220526"),89,58,55,31,67,1,88,79,80,59,47,4,41,62,65,67,7,5,46,44,57,43,64,58,17,56,79,14,37,90,53,37,39,24,86,32,7,18,57,44,64,44,31,70,20,86,67,64,58,22,17,47,77,1,6} ;
}



Perhaph is wrong the codeblock bBlock

Function test()
local aDatadbf:=aData_array()
local number,nRecord
local nDelay

number:=89 // delay must be 24

? Rit( aDataDbf, number, 1, nrecord )
return nil

Function Rit( aData, numero, nWheel,nRecord )
local nCount := 0
local nPos1,nPos2,nPos3,nPos4,nPos5
local bBlock

nPos1 := ( nWheel - 1 ) * 5 + 3
nPos2 := ( nWheel - 1 ) * 5 + 4
nPos3 := ( nWheel - 1 ) * 5 + 5
nPos4 := ( nWheel - 1 ) * 5 + 6
nPos5 := ( nWheel - 1 ) * 5 + 7

bBlock:= { |a| If( a[ nPos1 ] = numero .or. ;
a[ nPos2 ] = numero .or. ;
a[ nPos3 ] = numero .or. ;
a[ nPos4 ] = numero .or. ;
a[ nPos5 ] = numero , , nCount++ ) }



FW_RAEval( aData, bBlock, nRecord-1 )



return nCount
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)

I use : FiveWin for Harbour March-April 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Re: start at the end and go back in an array
Posted: Mon May 30, 2022 04:42 PM
Dear Antonio,
I do not understand the return value.

Best regards,
Otto

Code (fw): Select all Collapse
function FW_RAEval( aArray, bBlock, nStart, nCount )

   local nPos  := IfNil( nStart, Len( aArray ) )

   RAScan( aArray, { |u| Eval( bBlock, u, nPos ), nPos--, .f. }, nStart, nCount )

return aArray
Posts: 7317
Joined: Thu Oct 18, 2012 07:17 PM
Re: start at the end and go back in an array
Posted: Mon May 30, 2022 05:04 PM

also I ++

Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)

I use : FiveWin for Harbour March-April 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com