Help with stop - start of a loop

Hi All

I have the following attached loop that runs through 300+ mil loops generated from 3 Lists of string.

District, inner & ending

Is there any way to save the current position from the "For each .. as string in .." and then load the position back in ? Just that I have an estimated run time of 500+ hours and would like to be able to resume from a stored position should I have to.

I am also opened to other ideas aswell :-)

Many Thanks
Steve

Dim District, Inner, Ending As New List(Of String)
 
        District = DistrictList()
        Inner = InnerList()
        Ending = EndingList()
 
        For Each d1 As String In District
            s1 = d1
            For Each i1 As String In Inner
                s2 = s1 & i1
                For Each e1 As String In Ending
                    s3 = s2 & " " & e1
 
                    While pauseLoop
                        System.Threading.Thread.Sleep(100)
                        Application.DoEvents()
                    End While
 
                    Application.DoEvents()
 
                Next
            Next
        Next

Open in new window

LVL 19
Stephen MandersonSoftware EngineerAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Guy Hengel [angelIII / a3]Billing EngineerCommented:
let's assume that the Distrinctlist, InnerList and EndingList are sorted (if not, that will be "required")

then, you have only to check if the loop's control variable is after the starting value OR if the outer loops are on the next level (in which case all inner loops have to be processed)
Dim District, Inner, Ending As List(Of String)
 
Dim startDistrict As String = "" 'set the district to start processing from, leave empty to do it all
Dim startInner As String = "" 'idem
Dim startEnding As String = "" 'idem
 
        District = DistrictList()
        Inner = InnerList()
        Ending = EndingList()
 
        For Each d1 As String In District
         If d1 >= startDistrict Then
            s1 = d1
            For Each i1 As String In Inner
              if i1 >= startInner OR d1 > startDistrict then
                s2 = s1 & i1
                For Each e1 As String In Ending
                  if e1 >= startEnding or d1 > startDistrict or i1 > startInner then
                    s3 = s2 & " " & e1
 
                    While pauseLoop
                        System.Threading.Thread.Sleep(100)
                        Application.DoEvents()
                    End While
 
                    Application.DoEvents()
                  end if 'if e1 >= startEnding or d1 > startDistrict or i1 > startInner then
                Next 'e1 As String In Ending
              End if ' if i1 >= startInner OR d1 > startDistrict then
            Next 'i1 As String In Inner
          End if ' If d1 >= startDistrict Then
        Next 'd1 As String In District

Open in new window

0
SanclerCommented:
Or use an index rather than for each and store the indices.  Something like this

Private Sub ProcessLists(dStart As Long, iStart As Long, eStart As Long)
  Dim dIndex, iIndex, eIndex, dEnd, iEnd, eEnd As Long
  dEnd = District.Count - 1
  iEnd = Inner.Count - 1
  eEnd = Ending.Count - 1
  For dIndex = dStart to dEnd
      s1 = District(dIndex)
      For iIndex = iStart to iEnd
          s2 = s1 & Inner(iIndex)
          For eIndex = eStart to eEnd
              s3 = s2 & " " & Ending(eIndex)
              'do stuff
              If stopping Then
                 'save dIndex, iIndex, eIndex + 1
                 'may need to check if eIndex = eEnd and, if so
                 'save iIndex + 1 and 0 for eIndex
                 Exit Sub
              End If
          Next
          eStart = 0
      Next
      iStart = 0
  Next
End Sub

At the beginning call the sub with 0,0,0.  On restarting call it with the saved values.

Roger
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Guy Hengel [angelIII / a3]Billing EngineerCommented:
>Sancler
your code has the flaw that when you start with 0,5,0, it will skip the values for the second loop from 0..4 for ALL the value of the first loop... which is no good :)
0
Cloud Class® Course: CompTIA Cloud+

The CompTIA Cloud+ Basic training course will teach you about cloud concepts and models, data storage, networking, and network infrastructure.

SanclerCommented:
angelIII

What about the third line from the end

     iStart = 0

Before dIndex goes from 0 to 1, iStart is reset to 0.

I must admit I haven't tested it, though.  Do you still reckon there's a flaw?

Roger
0
Guy Hengel [angelIII / a3]Billing EngineerCommented:
oooops, I overlooked that! I stand corrected!
0
Stephen MandersonSoftware EngineerAuthor Commented:
Thanks
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Visual Basic.NET

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.