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