SoftwareMining
Simple, Safe & Effective COBOL to Java / C#


COBOL to C# / .NET Sample: Comparing COBOL to Converted Code


The following shows the translation of a small COBOL program to C# using SoftwareMining migration tools.
The main difference between java and C# translation is the use of java-beans pattern (getters/setters) in java and Properties in C#.
This is a simple example, and does not show removal of GO TO statements, removal of dead code, code reuse strategies, or ....
Noteworthy issue: For a more detailed list of translation features please see 16 Translator features Essential for successful COBOL to Java projects.
   
  PROGRAM-ID. LOAN.
  DATA DIVISION.
  FILE SECTION.

  WORKING-STORAGE SECTION.
  01  WS-VARS.
    05 PRINCIPAL          PIC 9(9) VALUE 0.
    05 INTEREST-RATE      PIC 99V99 VALUE 0.
    05 LOAN-LENGTH        PIC 99 VALUE 0.
    05 NEXT-INTEREST      PIC 99V99.
    05 NEXT-YEAR          PIC 99.
  01 CLIENT-RECORD.
    05 NAME               PIC X(20).
    05 ADDRESS            PIC X(20) OCCURS 3 TIMES.
    05 ID                 PIC 9(4) COMP.

  ...
  
  
  
  
  
 /// Sample COBOL to C# translated code
namespace Softwaremining.Cobol2CSharp.Example
{
 public sealed class Loan  : BaseService  {
  
  // Note: 01 level WS-VARS name is simplified (Optional) 
  // and converted to a DAO
  // The DAO handles REDEFINES, COMP, OCCURS-DEPENDING, ... 
  private Vars ;
  
  // Client-RECORD has been translated to ClientRecord DAO, 
  // but since the program does not reference ClientRecord, 
  // it will automatically be commented out.
  
  // private ClientRecord clientRecord;
  ...
  /// constructor 
  public Loan(BaseService parent) : base(parent) 
  {
    vars = new Vars(this);
    // clientRecord = new ClientRecord(this);
	
   ...
  
  * Main entry point to program
   LOAN-MAIN-001.
   
  *  -
  * CLEAR SCREEN AND READ DATA
  *  -

       IF LOAN-LENGTH > 4 THEN
          COMPUTE START-YEAR = LOAN-LENGTH - 4
       ELSE
      COMPUTE START-YEAR = 0.

       IF INTEREST-RATE > 0.4 THEN
          COMPUTE START-INTEREST = INTEREST-RATE - 0.4
       ELSE
          COMPUTE START-INTEREST = 0
       END-IF
     
       MOVE 1 TO YEAR-ROW.
   
  
  *  -
  * GO THRU THE NUMBER OF YEARS
  *  -

       MOVE "% Rate->" TO DSP-NO-YRS(1).
       MOVE START-YEAR TO NEXT-YEAR
       PERFORM VARYING YEAR-ROW FROM 2 BY 1 UNTIL YEAR-ROW = 11
         PERFORM DO-NEXT-ROW
         ADD 1 TO NEXT-YEAR
       END-PERFORM.

	   


	   

  *  -
  *  AND EXIT
  *  -
       STOP RUN.
	   
  
  /// <summary>
  /// Main Entrance to program
  /// </summary> 
  protected void LoanMain () 
  {
   
   //   - 
   //  CLEAR SCREEN AND READ DATA 
   //   - 
   if (vars.LoanLength > 4)
   {
     vars.StartYear = vars.LoanLength - 4;
   } else
   {
     vars.StartYear = 0;
   }
	  
   if (vars.InterestRate > 0.4)
   {
     vars.StartInterest = vars.InterestRate - 0.4;
   } else
   {
     vars.StartInterest = 0;
   }
   vars.YearRow = 1;
   vars.setYearRow(1);
   //   - 
   //  GO THRU THE NUMBER OF YEARS 
   //   - 
   displayResult.SetNoYrs(0, "% Rate->");
   vars.NextYear = vars.StartYear;
   vars.YearRow = 2;
   while (vars.YearRow != 11)
   {
     DoNextRow ();
     vars.NextYear = vars.NextYear + 1;
     vars.YearRow = vars.YearRow + 1;
   }
   //   - 
   //   AND EXIT 
   //   - 
   Stop();
 }


  * 
  * Calculates values for individual rows
  * 
   DO-NEXT-ROW.

       MOVE START-INTEREST TO NEXT-INTEREST

	   
       PERFORM VARYING INTEREST-COL FROM 1 BY 1
         UNTIL INTEREST-COL = 10
         MOVE NEXT-INTEREST TO DSP-RESULT(1, INTEREST-COL)
         PERFORM CALCULATE
         MOVE NEXT-RESULT TO DSP-RESULT(YEAR-ROW, INTEREST-COL)
         ADD 0.1 TO NEXT-INTEREST
       END-PERFORM.

	   
	   
  /// <summary>
  /// Calculates values for individual rows
  </summary>
  protected void DoNextRow () {
   vars.NextInterest = vars.StartInterest;
      
   vars.InterestCol = 1;
	  
   while (vars.InterestCol != 10)
   {
     displayResult.SetResult(0, vars.InterestCol - 1
	    , vars.NextInterest);
     Calculate();
     displayResult.SetResult(vars.YearRow - 1, vars.InterestCol - 1
	    , vars.NextResult);
     vars.NextInterest = vars.NextInterest + 0.1;
     vars.InterestCol = vars.InterestCol + 1;
   }
 }

  * 
  * The next paragraph calculates CELL values
  * 
   CALCULATE.
       COMPUTE INTDEC = NEXT-INTEREST / (12.0 * 100.0)
       COMPUTE NUMMONTHS = NEXT-YEAR * 12.0
	   ...
   
  /// <summary>
  /// The next paragraph calculates CELL values
  </summary>
  protected void Calculate () {
   vars.Intdec = vars.NextInterest / (12.0 * 100.0);
   vars.Nummonths = (int)((double)vars.NextYear * 12.0);
   ...
 }
 


                       



  © 2017, SoftwareMining Technologies. All Rights Reserved. "SoftwareMining Technologies" is a trademark of Software Modernization Technologies Ltd (UK). Software Modernization Technologies Ltd. Registered in England company no: 7300248. Reg Offices: 8b Accommodation Road, London NW11 8ED, United Kingdom.