Quintiq file version 2.0 #parent: #root Method PTF_FlattenNestedLoop ( Number largestregnum, String body ) as String id:Method_LibPTF_pnlTestRunner_PTF_FlattenNestedLoop { #keys: '[104342.0.866223841]' Body: [* // Specifically for Loops - Copy the statement within loops and repeat them for a number of specified times resultbody := body; loopidentifier := LibPTF_StandardAction::Loop() + [String]largestregnum; endloopidentifier := LibPTF_StandardAction::EndLoop() + [String]largestregnum; // Extract the loop keyword and its corresponding actions from the script startindexofbody := resultbody.FindString( loopidentifier, 0 ); loopkeywordandactionlength := resultbody.FindString( endloopidentifier, 0 ) - startindexofbody; loopkeywordandactions := resultbody.SubString( startindexofbody, loopkeywordandactionlength ); // Extract number of iteration and index of which the actions within loop starts actionsstartindex := loopkeywordandactions.FindString( ";", 0 ) + 1; loopwithiteration := loopkeywordandactions.SubString( 0, actionsstartindex - 1 ); iteration := [Number]loopwithiteration.Tokenize( " " ).Element( 1 ); actionswithinloop := loopkeywordandactions.RestString( actionsstartindex ); appendactions := "" for( i := 1; i <= iteration - 1; i++ ) { appendactions := appendactions + actionswithinloop; } // Append additional invocation of actions into scripts of which to meet the number of iteration targetindextoappend := resultbody.FindString( ";", startindexofbody ) + 1; resultbody := resultbody.Insert( targetindextoappend, appendactions ); resultbody := resultbody.ReplaceAll( loopidentifier + " " + [String]iteration + ";", "" ); resultbody := resultbody.ReplaceAll( endloopidentifier + ";", "" ); return resultbody; *] }