Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method PTF_ValidateLoop ( 
 | 
  String script 
 | 
) as String id:Method_LibPTF_dlgCreateEditTestScript_PTF_ValidateLoop 
 | 
{ 
 | 
  #keys: '[104342.0.868898838]' 
 | 
  Body: 
 | 
  [* 
 | 
    // Validate the loop statements in the script - if there is equal match of Loop to EndLoop statement 
 | 
    regnumber             := 0; 
 | 
    loopindex             := 0; 
 | 
    largestregnum         := 0; 
 | 
    linenr                := 0; 
 | 
    startfindendloopindex := 0; 
 | 
    loopwithoutendloop    := false; 
 | 
    loopidentifier        := ""; 
 | 
    errormsg              := ""; 
 | 
    keywordloop           := LibPTF_StandardAction::Loop(); 
 | 
    keywordendloop        := LibPTF_StandardAction::EndLoop(); 
 | 
     
 | 
    // Create identifier of each Loop 
 | 
    while( script.NrOccurrences( keywordloop + " ", 0, true ) > 0 ) 
 | 
    { 
 | 
      regnumber++; 
 | 
     
 | 
      loopindex := script.FindString( keywordloop + " ", loopindex ); 
 | 
      script    := script.Insert( loopindex + keywordloop.Length(), [String]regnumber ); 
 | 
    } 
 | 
     
 | 
    largestregnum := regnumber; 
 | 
     
 | 
    // Create identifier of its corresponding EndLoop 
 | 
    while( regnumber > 0 ) 
 | 
    { 
 | 
      loopindex    := script.FindString( keywordloop + [String]regnumber, 0 ); 
 | 
      endloopindex := script.FindString( keywordendloop + ";", loopindex ); 
 | 
     
 | 
      if( endloopindex <> -1 ) 
 | 
      { 
 | 
        script := script.Insert( endloopindex + keywordendloop.Length(), [String]regnumber ); 
 | 
      } 
 | 
      regnumber--; 
 | 
    } 
 | 
     
 | 
    // Check if all Loop has its corresponding EndLoop 
 | 
    while( largestregnum > 0 and not loopwithoutendloop ) 
 | 
    { 
 | 
      loopidentifier        := keywordloop + [String]largestregnum; 
 | 
      startfindendloopindex := script.FindString( loopidentifier, 0 ) 
 | 
      loopwithoutendloop    := script.FindString( keywordendloop + [String]largestregnum + ";", startfindendloopindex ) = -1; 
 | 
     
 | 
      largestregnum--; 
 | 
    } 
 | 
     
 | 
    // If Loop without EndLoop found, construct error message 
 | 
    if( loopwithoutendloop ) 
 | 
    { 
 | 
      // Get information about the problematic loop 
 | 
      loopendofline := script.FindString( ";", startfindendloopindex ); 
 | 
      loopline      := script.SubString( startfindendloopindex, loopendofline - startfindendloopindex ); 
 | 
      iterationnr   := loopline.ReplaceAll( loopidentifier, "" ); 
 | 
     
 | 
      scriptprior := script.SubString( 0, startfindendloopindex ); 
 | 
      linenr      := scriptprior.NrOccurrences( String::NewLine(), 0, true ) + 1; 
 | 
     
 | 
      errormsg := "Line #" + [String]linenr + ": " + keywordloop + iterationnr + " without " + keywordendloop; 
 | 
    } 
 | 
    else 
 | 
    { 
 | 
      // Check if EndLoop without Loop found 
 | 
      endloopwithoutregnum := keywordendloop + ";"; 
 | 
      if( script.FindString( endloopwithoutregnum, 0 ) <> -1 ) 
 | 
      { 
 | 
        scriptprior := script.SubString( 0, script.FindString( keywordendloop + ";", 0 ) ); 
 | 
        linenr      := scriptprior.NrOccurrences( String::NewLine(), 0, true ) + 1; 
 | 
     
 | 
        errormsg := "Line #" + [String]linenr + ": " + keywordendloop + " without " + keywordloop; 
 | 
      } 
 | 
    } 
 | 
     
 | 
    return errormsg; 
 | 
  *] 
 | 
} 
 |