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