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;
|
*]
|
}
|