| recordin.mos | 
| (!******************************************************
   Mosel Example Problems
   ====================== 
   file recordin.mos
   `````````````````
   Reading records from
   spreadsheets or databases via ODBC.
   - Using 'initializations from' with odbc IO driver -
   
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, Nov. 2007, rev. Jan. 2014
*******************************************************!)
model "Record input (ODBC)"
 uses "mmodbc"
 parameters
                              ! Use Excel spreadsheet `recorddata.xls'
!  CNCTIO = "recorddata.xls"
                              ! Use Access database `recorddata.mdb'
  CNCTIO = "debug;recorddata.mdb"
                              ! Use mysql database `recorddata' (not provided)
!  CNCTIO = "debug;DSN=mysql;DB=recorddata"
                              ! Use SQLite database `recorddata' via ODBC
!  CNCTIO = 'DSN=sqlite;DATABASE=recorddata.sqlite'
                              ! Use SQLite database `recorddata' directly
!  CNCTIO = 'recorddata.sqlite'
 end-parameters
 public declarations
  PRODUCTS: set of string
  MACH: range
  ProdRec = public record
   Cost: real
   Duration: integer
  end-record 
  PDATA,PDATA2: dynamic array(PRODUCTS,MACH) of ProdRec
  R = 1..9
  AllDataRec = public record
   Product: string
   Mach: integer
   Cost: real
   Duration: integer
  end-record 
  ALLDATA,ALLDATA2: array(R) of AllDataRec
 end-declarations
! **** Reading complete records
 initializations from "mmodbc.odbc:"+CNCTIO
  PDATA as "ProdData"
  ALLDATA as "noindex;ProdData"
 end-initializations
! **** Reading record fields
 initializations from "mmodbc.odbc:"+CNCTIO
  PDATA2(Cost) as "ProdData(IndexP,IndexM,Cost)"
  ALLDATA2(Product,Mach,Duration) as "noindex;ProdData(IndexP,IndexM,Duration)"
 end-initializations
! Now let us see what we have
 writeln('PDATA is: ', PDATA)
 writeln('ALLDATA is: ', ALLDATA)
 writeln('PDATA2 is: ', PDATA2)
 writeln('ALLDATA2 is: ', ALLDATA2)
end-model
 | 
| 
 | 
| recordin1.mos | 
| (!******************************************************
   Mosel Example Problems
   ====================== 
   file recordin1.mos
   ``````````````````
   Reading records from a text file.
   
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, Nov. 2007, rev. Jul. 2010
*******************************************************!)
model "Record input (text files)"
 public declarations
  PRODUCTS: set of string
  MACH: range
  ProdRec = public record
   Cost: real
   Duration: integer
  end-record 
  PDATA: dynamic array(PRODUCTS,MACH) of ProdRec
  R = 1..9
  AllDataRec = public record
   Product: string
   Mach: integer
   Cost: real
   Duration: integer
  end-record 
  ALLDATA: array(R) of AllDataRec
 end-declarations
! **** Reading complete records
 initializations from "recorddata.dat"
  PDATA as "ProdData"
  ALLDATA as "AllData"
 end-initializations
! Now let us see what we have
 writeln('PDATA is: ', PDATA)
 writeln('ALLDATA is: ', ALLDATA)
end-model
 | 
| 
 | 
| recordin2.mos | 
| (!******************************************************
   Mosel Example Problems
   ====================== 
   file recordin2.mos
   ``````````````````
   Reading records from
   spreadsheets or databases via ODBC.
   - Using SQL commands -
   
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, Nov. 2007, rev. Sep. 2018
*******************************************************!)
model "Record input (SQL)"
 uses "mmodbc"
 parameters
                              ! Use Excel spreadsheet `recorddata.xls'
!  CNCT = 'DSN=Excel Files;DBQ=C:/xpress/examples/mosel/WhitePapers/MoselData/recorddata.xls'
!  CNCT = 'recorddata.xls'
                              ! Use Access database `recorddata.mdb'
!  CNCT = 'DSN=MS Access Database;DBQ=C:/xpress/examples/mosel/WhitePapers/MoselData/recorddata.mdb'
  CNCT = 'recorddata.mdb'
                              ! Use mysql database `recorddata' (not provided)
!  CNCT = 'DSN=mysql;DB=recorddata'
                              ! Use SQLite database `recorddata' via ODBC
!  CNCT = 'DSN=sqlite;DATABASE=recorddata.sqlite'
                              ! Use SQLite database `recorddata' directly
!  CNCT = 'recorddata.sqlite'
 end-parameters
 public declarations
  PRODUCTS: set of string
  MACH: range
  ProdRec = public record
   Cost: real
   Duration: integer
  end-record 
  PDATA: dynamic array(PRODUCTS,MACH) of ProdRec
  R = 1..9
  AllDataRec = public record
   Product: string
   Mach: integer
   Cost: real
   Duration: integer
  end-record 
  ALLDATA: array(R) of AllDataRec
 end-declarations
! **** Reading complete records
 setparam("SQLverbose",true)
 SQLconnect(CNCT)
 SQLexecute("select * from ProdData", PDATA)
 setparam("SQLndxcol", false)           ! Dense data
 SQLexecute("select * from ProdData", ALLDATA)
 SQLdisconnect
! Now let us see what we have
 writeln('PDATA is: ', PDATA)
 writeln('ALLDATA is: ', ALLDATA)
end-model
 | 
| 
 | 
| recordin3.mos | 
| (!******************************************************
   Mosel Example Problems
   ====================== 
   file recordin3.mos
   ``````````````````
   Reading records from
   spreadsheets or databases via ODBC.
   - Using 'initializations from' with the excel driver -
   
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, Nov. 2007, rev. Feb. 2019
*******************************************************!)
model "Record input (Excel)"
 uses "mmsheet"
 parameters
  CSTR = 'mmsheet.excel:skiph;recorddata.xls'
  CSTR2= 'mmsheet.excel:skiph;recorddata2.xls'
 end-parameters
 
 public declarations
  PRODUCTS: set of string
  MACH: range
  ProdRec = public record
   Cost: real
   Duration: integer
  end-record 
  PDATA,PDATA2,PDATA3,PDATA4: dynamic array(PRODUCTS,MACH) of ProdRec
  R = 1..9
  AllDataRec = public record
   Product: string
   Mach: integer
   Cost: real
   Duration: integer
  end-record 
  ALLDATA,ALLDATA2,ALLDATA3,ALLDATA4: array(R) of AllDataRec
 end-declarations
! **** Reading from a spreadsheet with named ranges ****
! Reading complete records
 initializations from CSTR
  PDATA as "ProdData"
  ALLDATA as "noindex;ProdData"
 end-initializations
! Reading record fields
 initializations from CSTR
  PDATA2(Cost) as "CostData"
  ALLDATA2(Product,Mach,Duration) as "noindex;DurationData"
 end-initializations
! Now let us see what we have
 writeln('PDATA is: ', PDATA)
 writeln('ALLDATA is: ', ALLDATA)
 writeln('PDATA2 is: ', PDATA2)
 writeln('ALLDATA2 is: ', ALLDATA2)
! **** Reading from a simple spreadsheet without named ranges ****
 initializations from CSTR2
! Reading complete records  
  PDATA3 as "[InputData$A:D]"
  ALLDATA3 as "noindex;[InputData$A:D]"
! Reading selected record fields  
! With option 'skiph' the column headers can be used to select columns
  PDATA4(Cost) as "[InputData$A:D](Product,Mach,Cost)"
 ! PDATA4(Cost) as "[InputData$A:D](#1,#2,#3)"    ! Alternative form of column selection in spreadsheet
  ALLDATA4(Product,Mach,Duration) as "noindex;[InputData$A:D](Product,Mach,Duration)"
 end-initializations
! Now let us see what we have
 writeln('PDATA3 is: ', PDATA3)
 writeln('ALLDATA3 is: ', ALLDATA3)
 writeln('PDATA4 is: ', PDATA4)
 writeln('ALLDATA4 is: ', ALLDATA4)
end-model
 | 
| 
 | 
| recordin4.mos | 
| (!******************************************************
   Mosel Example Problems
   ====================== 
   file recordin4.mos
   ``````````````````
   Reading records from an Oracle database.
   - Using 'initializations' and OCI statements -
   
   (c) 2012 Fair Isaac Corporation
       author: S. Heipcke, Dec. 2012
*******************************************************!)
model "Record input (OCI)"
 uses "mmoci"
 parameters
  DB="myname/mypassword@dbname"     ! Login to Oracle database (not provided)
  CNCT="mmoci.oci:debug;"+DB
 end-parameters
 public declarations
  PRODUCTS: set of string
  MACH: range
  ProdRec = public record
   Cost: real
   Duration: integer
  end-record 
  PDATA,PDATA1,PDATA2: dynamic array(PRODUCTS,MACH) of ProdRec
  R = 1..9
  AllDataRec = public record
   Product: string
   Mach: integer
   Cost: real
   Duration: integer
  end-record 
  ALLDATA,ALLDATA1,ALLDATA2: array(R) of AllDataRec
 end-declarations
 
! **** Using SQL statements ****
! Reading complete records
 setparam("OCIdebug",true)
 OCIlogon(DB)
 
 OCIexecute("select * from ProdData", PDATA)
 setparam("ocindxcol",false)      ! Dense data format (no indices)
 OCIexecute("select * from ProdData", ALLDATA)
 OCIlogoff
! **** Using 'initializations from' ****
! Reading complete records
 initializations from CNCT
  PDATA1 as "ProdData"
  ALLDATA1 as "noindex;ProdData"
 end-initializations
! Reading record fields
 initializations from CNCT
  PDATA2(Cost) as "ProdData(IndexP,IndexM,Cost)"
  ALLDATA2(Product,Mach,Duration) as "noindex;ProdData(IndexP,IndexM,Duration)"
 end-initializations
! Now let us see what we have
 writeln('PDATA is: ', PDATA)
 writeln('ALLDATA is: ', ALLDATA)
 writeln('PDATA1 is: ', PDATA1)
 writeln('ALLDATA1 is: ', ALLDATA1)
 writeln('PDATA2 is: ', PDATA2)
 writeln('ALLDATA2 is: ', ALLDATA2)
end-model
**************************************************
! Creation of data tables in an Oracle database:
 declarations
  tsucc: array ({false,true}) of string
  PDATA3: dynamic array(PRODUCTS,MACH) of ProdRec
 end-declarations
 tsucc(false):="failed"; tsucc(true):="succeeded"
 initializations from "recorddata.dat"
  PDATA3 as "ProdData"
 end-initializations
 setparam("OCIdebug",true)
 OCIlogon(DB)
 writeln("Connection number: ",getparam("OCIconnection"))
 OCIexecute("drop table ProdData")
 OCIexecute("create table ProdData (IndexP varchar(10), IndexM integer, Cost float, Duration integer)")
 writeln(" - Create ProdData (",tsucc(getparam("OCIsuccess")),")")
 OCIexecute("insert into ProdData (IndexP,IndexM,Cost,Duration) values (:1, :2, :3, :4)", PDATA3)
 writeln(" - Insert values into ProdData (",tsucc(getparam("OCIsuccess")),",",
        getparam("OCIrowcnt"),'/',getparam("OCIrowxfr")," rows)")
 OCIlogoff
 | 
| 
 | 
| recordin5.mos | 
| (!******************************************************
   Mosel Example Problems
   ====================== 
   file recordin5.mos
   ``````````````````
   Reading records from spreadsheets.
   - Using 'initializations from' with the xls driver -
   
   (c) 2012 Fair Isaac Corporation
       author: S. Heipcke, Dec. 2012, rev. Feb. 2019
*******************************************************!)
model "Record input (generic spreadsheet)"
 uses "mmsheet"
 parameters
!  CSTR= 'mmsheet.xls:skiph;recorddata.xls'
  CSTR= 'mmsheet.xlsx:skiph;recorddata.xlsx'
!  CSTR2= 'mmsheet.xls:skiph;recorddata2.xls'
  CSTR2= 'mmsheet.xlsx:skiph;recorddata2.xlsx'
 end-parameters
 
 public declarations
  PRODUCTS: set of string
  MACH: range
  ProdRec = public record
   Cost: real
   Duration: integer
  end-record 
  PDATA,PDATA2,PDATA3,PDATA4: dynamic array(PRODUCTS,MACH) of ProdRec
  R = 1..9
  AllDataRec = public record
   Product: string
   Mach: integer
   Cost: real
   Duration: integer
  end-record 
  ALLDATA,ALLDATA2,ALLDATA3,ALLDATA4: array(R) of AllDataRec
 end-declarations
! **** Reading from a spreadsheet with named ranges ****
! Reading complete records
 initializations from CSTR
  PDATA as "ProdData"
  ALLDATA as "noindex;ProdData"
 end-initializations
! Reading record fields
 initializations from CSTR
  PDATA2(Cost) as "CostData"
  ALLDATA2(Product,Mach,Duration) as "noindex;DurationData"
 end-initializations
! Now let us see what we have
 writeln('PDATA is: ', PDATA)
 writeln('ALLDATA is: ', ALLDATA)
 writeln('PDATA2 is: ', PDATA2)
 writeln('ALLDATA2 is: ', ALLDATA2)
! **** Reading from a simple spreadsheet without named ranges ****
 initializations from CSTR2
! Reading complete records  
  PDATA3 as "[InputData$A:D]"
  ALLDATA3 as "noindex;[InputData$A:D]"
! Reading selected record fields 
! With option 'skiph' the column headers can be used to select columns
  PDATA4(Cost) as "[InputData$A:D](Product,Mach,Cost)"
 ! PDATA4(Cost) as "[InputData$A:D](#1,#2,#3)"    ! Alternative form of column selection in spreadsheet
  ALLDATA4(Product,Mach,Duration) as "noindex;[InputData$A:D](Product,Mach,Duration)"
 end-initializations
! Now let us see what we have
 writeln('PDATA3 is: ', PDATA3)
 writeln('ALLDATA3 is: ', ALLDATA3)
 writeln('PDATA4 is: ', PDATA4)
 writeln('ALLDATA4 is: ', ALLDATA4)
end-model
 | 
| 
 | 
| recordin6.mos | 
| (!******************************************************
   Mosel Example Problems
   ====================== 
   file recordin6.mos
   ``````````````````
   Reading records from spreadsheets.
   - Using 'initializations from' with the csv driver -
   
   (c) 2012 Fair Isaac Corporation
       author: S. Heipcke, Dec. 2012, rev. Feb. 2019
*******************************************************!)
model "Record input (CSV)"
 uses "mmsheet"
 parameters
  CSTR= 'mmsheet.csv:recorddata.csv'
  CSTR2= 'mmsheet.csv:skiph;recorddata2.csv'
 end-parameters
 
 public declarations
  PRODUCTS: set of string
  MACH: range
  ProdRec = public record
   Cost: real
   Duration: integer
  end-record 
  PDATA,PDATA2,PDATA3,PDATA4: dynamic array(PRODUCTS,MACH) of ProdRec
  R = 1..9
  AllDataRec = public record
   Product: string
   Mach: integer
   Cost: real
   Duration: integer
  end-record 
  ALLDATA,ALLDATA2,ALLDATA3,ALLDATA4: array(R) of AllDataRec
 end-declarations
! **** Reading from a datafile that contains various data sets in the expected formats ****
! Reading complete records
 initializations from CSTR
  PDATA as "[B4:E12]"
  ALLDATA as "noindex;[B4:E12]"
 end-initializations
! Reading record fields
 initializations from CSTR
  PDATA2(Cost) as "[B4:D12]"
  ALLDATA2(Product,Mach,Duration) as "noindex;[B17:D25]"
 end-initializations
! Now let us see what we have
 writeln('PDATA is: ', PDATA)
 writeln('ALLDATA is: ', ALLDATA)
 writeln('PDATA2 is: ', PDATA2)
 writeln('ALLDATA2 is: ', ALLDATA2)
! **** Reading from a datafile that contains a single table, selecting columns from a specified range ****
 initializations from CSTR2
! Reading complete records  
  PDATA3 as "[A:D]"
  ALLDATA3 as "noindex;[A:D]"
! Reading selected record fields 
! With option 'skiph' the column headers can be used to select columns
  PDATA4(Cost) as "[A:D](Product,Mach,Cost)"
!  PDATA4(Cost) as "[A:D](#1,#2,#3)"    ! Alternative form of column selection in spreadsheet
  ALLDATA4(Product,Mach,Duration) as "noindex;[A:D](Product,Mach,Duration)"
 end-initializations
! Now let us see what we have
 writeln('PDATA3 is: ', PDATA3)
 writeln('ALLDATA3 is: ', ALLDATA3)
 writeln('PDATA4 is: ', PDATA4)
 writeln('ALLDATA4 is: ', ALLDATA4)
end-model
 | 
| 
 | 
| recordout.mos | 
| (!******************************************************
   Mosel Example Problems
   ====================== 
   file recordout.mos
   ``````````````````
   Writing out records to
   spreadsheets or databases via ODBC.
   - Using 'initializations from' with odbc IO driver -
   
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, Nov. 2007, rev. Jan. 2014
*******************************************************!)
model "Record output (ODBC)"
 uses "mmodbc"
 parameters
                              ! Use Excel spreadsheet `recorddata.xls'
!  CNCTIO = "recorddata.xls"
                              ! Use Access database `recorddata.mdb'
  CNCTIO = "debug;recorddata.mdb"
                              ! Use mysql database `recorddata' (not provided)
!  CNCTIO = "debug;DSN=mysql;DB=recorddata"
                              ! Use SQLite database `recorddata' via ODBC
!  CNCTIO = 'DSN=sqlite;DATABASE=recorddata.sqlite'
                              ! Use SQLite database `recorddata' directly
!  CNCTIO = 'recorddata.sqlite'
 end-parameters
 declarations
  PRODUCTS: set of string
  MACH: range
  ProdRec = record
   Cost: real
   Duration: integer
  end-record 
  PDATA: dynamic array(PRODUCTS,MACH) of ProdRec
  R = 1..9
  AllDataRec = record
   Product: string
   Mach: integer
   Cost: real
   Duration: integer
  end-record 
  ALLDATA: array(R) of AllDataRec
 end-declarations
! **** Reading data from a text file
 initializations from "recorddata.dat"
  PDATA as "ProdData"
  ALLDATA as "AllData"
 end-initializations
! **** Write out complete records
! (This assumes that the output tables have been created previously.)
! ATTENTION: results from previous runs must be removed previously.
 initializations to "mmodbc.odbc:"+CNCTIO
  PDATA as "ProdDataOutH"
  ALLDATA as "noindex;AllDataOutH"
 end-initializations
! **** Write out record fields
 initializations to "mmodbc.odbc:"+CNCTIO
  PDATA(Cost) as "CostOutH"
  ALLDATA(Product,Mach,Duration) as "noindex;DurationOutH"
 end-initializations
end-model
 | 
| 
 | 
| recordout1.mos | 
| (!******************************************************
   Mosel Example Problems
   ====================== 
   file recordout1.mos
   ```````````````````
   Writing out records to a text file.
   
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, Nov. 2007, rev. Jul. 2010
*******************************************************!)
model "Record output (Text file)"
 declarations
  PRODUCTS: set of string
  MACH: range
  ProdRec = record
   Cost: real
   Duration: integer
  end-record 
  PDATA: dynamic array(PRODUCTS,MACH) of ProdRec
  R = 1..9
  AllDataRec = record
   Product: string
   Mach: integer
   Cost: real
   Duration: integer
  end-record 
  ALLDATA: array(R) of AllDataRec
 end-declarations
! **** Reading data from a text file
 initializations from "recorddata.dat"
  PDATA as "ProdData"
  ALLDATA as "AllData"
 end-initializations
! **** Write out complete records
 initializations to "recordout.dat"
  PDATA as "ProdDataOutH"
  ALLDATA as "AllDataOutH"
 end-initializations
! **** Write out record fields
 initializations to "recordout.dat"
  PDATA(Cost) as "CostOutH"
  ALLDATA(Product,Mach,Duration) as "DurationOutH"
 end-initializations
end-model
 | 
| 
 | 
| recordout2.mos | 
| (!******************************************************
   Mosel Example Problems
   ====================== 
   file recordout2.mos
   ```````````````````
   Writing out records to
   spreadsheets or databases via ODBC.
   - Using SQL commands -
   
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, Nov. 2007, rev. Sep. 2018
*******************************************************!)
model "Record output (SQL)"
 uses "mmodbc"
 parameters
                              ! Use Excel spreadsheet `recorddata.xls'
!  CNCT = 'DSN=Excel Files;DBQ=C:/xpress/examples/mosel/WhitePapers/MoselData/recorddata.xls'
!  CNCT = 'recorddata.xls'
                              ! Use Access database `recorddata.mdb'
!  CNCT = 'DSN=MS Access Database;DBQ=C:/xpress/examples/mosel/WhitePapers/MoselData/recorddata.mdb'
  CNCT = 'recorddata.mdb'
                              ! Use mysql database `recorddata' (not provided)
!  CNCT = 'DSN=mysql;DB=recorddata'
                              ! Use SQLite database `recorddata' via ODBC
!  CNCT = 'DSN=sqlite;DATABASE=recorddata.sqlite'
                              ! Use SQLite database `recorddata' directly
!  CNCT = 'recorddata.sqlite'
 end-parameters
 public declarations
  PRODUCTS: set of string
  MACH: range
  ProdRec = public record
   Cost: real
   Duration: integer
  end-record 
  PDATA: dynamic array(PRODUCTS,MACH) of ProdRec
  R = 1..9
  AllDataRec = public record
   Product: string
   Mach: integer
   Cost: real
   Duration: integer
  end-record 
  ALLDATA: array(R) of AllDataRec
 end-declarations
! **** Reading data from a text file
 initializations from "recorddata.dat"
  PDATA as "ProdData"
  ALLDATA as "AllData"
 end-initializations
! **** Write out complete records
 setparam("SQLverbose",true)
 setparam("SQLdebug",true)
 SQLconnect(CNCT)
 SQLexecute("delete from ProdDataOutH") ! Cleaning up previous results: works
                                        ! only for databases, cannot be used
                                        ! with spreadsheets (instead, delete
                                        ! previous solutions directly in the
                                        ! spreadsheet file)
 SQLexecute("insert into ProdDataOutH(IndexP,IndexM,Cost,Duration) values (?,?,?,?)",
  PDATA)
 SQLexecute("delete from AllDataOutH")  ! Cleaning up previous results
 setparam("SQLndxcol", false)           ! Dense data
 SQLexecute("insert into AllDataOutH(IndexP,IndexM,Cost,Duration) values (?,?,?,?)",
  ALLDATA)
 SQLdisconnect
end-model
 | 
| 
 | 
| recordout3.mos | 
| (!******************************************************
   Mosel Example Problems
   ====================== 
   file recordout3.mos
   ```````````````````
   Writing out records to
   spreadsheets or databases via ODBC.
   - Using 'initializations to' with the excel driver -
   
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, Nov. 2007, rev. Feb. 2019
*******************************************************!)
model "Record output (Excel)"
 uses "mmsheet", "mmsystem"
 parameters
  CSTR = 'mmsheet.excel:recorddata.xls'
  CSTR2 = 'mmsheet.excel:skiph;recordout.xls'
 end-parameters
 
 declarations
  PRODUCTS: set of string
  MACH: range
  ProdRec = record
   Cost: real
   Duration: integer
  end-record 
  PDATA: dynamic array(PRODUCTS,MACH) of ProdRec
  R = 1..9
  AllDataRec = record
   Product: string
   Mach: integer
   Cost: real
   Duration: integer
  end-record 
  ALLDATA: array(R) of AllDataRec
 end-declarations
! **** Reading data from a text file
 initializations from "recorddata.dat"
  PDATA as "ProdData"
  ALLDATA as "AllData"
 end-initializations
! **** Writing out into a spreadsheet with named ranges ****
! Write out complete records
! (This assumes that the output tables have been created previously.)
! ATTENTION: results from previous runs must be removed previously.
! Driver options: noindex - dense data
 initializations to CSTR
  PDATA as "ProdDataOut"
  ALLDATA as "noindex;AllDataOut"
 end-initializations
! Write out selected record fields
 initializations to CSTR
  PDATA(Cost) as "CostOut"
  ALLDATA(Product,Mach,Duration) as "noindex;DurationOut"
 end-initializations
! **** Writing out into a simple spreadsheet without named ranges
! The mmsheet.excel driver cannot create files so we copy a template file
! to be used as output destination (output file from previous runs is replaced)
 fcopy("recordout_templ.xls", "recordout.xls")
 if getsysstat<>0 then writeln("Copying failed"); exit(1); end-if
! Column ranges for output can be specified in various ways
 initializations to CSTR2
 ! Output complete records
  PDATA as "grow;[A:D]"
  ALLDATA as "noindex;grow;[F:I]"
 ! Output selected record fields
  PDATA(Cost) as "grow;[R1C11:R1C13]"
  ALLDATA(Product,Mach,Duration) as "noindex;grow;[R1C15:R1C17]"
 end-initializations
end-model
 | 
| 
 | 
| recordout4.mos | 
| (!******************************************************
   Mosel Example Problems
   ====================== 
   file recordout4.mos
   ```````````````````
   Writing out records to an Oracle database.
   - Using 'initializations to' and OCI statements -
   
   (c) 2012 Fair Isaac Corporation
       author: S. Heipcke, Dec. 2012
*******************************************************!)
model "Record output (OCI)"
 uses "mmoci"
 parameters
  DB="myname/mypassword@dbname"     ! Login to Oracle database (not provided)
  CNCT="mmoci.oci:debug;"+DB
 end-parameters
 declarations
  PRODUCTS: set of string
  MACH: range
  ProdRec = record
   Cost: real
   Duration: integer
  end-record 
  PDATA: dynamic array(PRODUCTS,MACH) of ProdRec
  R = 1..9
  AllDataRec = record
   Product: string
   Mach: integer
   Cost: real
   Duration: integer
  end-record 
  ALLDATA: array(R) of AllDataRec
 end-declarations
! **** Reading data from a text file
 initializations from "recorddata.dat"
  PDATA as "ProdData"
  ALLDATA as "AllData"
 end-initializations
! **** Using SQL statements ****
 setparam("OCIdebug",true)
 OCIlogon(DB)
 OCIexecute("delete from ProdDataOutH") ! Cleaning up previous results 
 OCIexecute("insert into ProdDataOutH(IndexP,IndexM,Cost,Duration) values (:1, :2, :3, :4)",
  PDATA)
 OCIexecute("delete from AllDataOutH")  ! Cleaning up previous results
 setparam("ocindxcol",false)            ! Dense data format (no indices)
 OCIexecute("insert into AllDataOutH(IndexP,IndexM,Cost,Duration) values (:1, :2, :3, :4)",
  ALLDATA)
 OCIlogoff
! **** Using 'initializations to' ****
! Write out complete records
 initializations to CNCT
  PDATA as "ProdDataOutH"
  ALLDATA as "noindex;AllDataOutH"
 end-initializations
! Write out record fields
 initializations to CNCT
  PDATA(Cost) as "CostOutH"
  ALLDATA(Product,Mach,Duration) as "noindex;DurationOutH"
 end-initializations
end-model
**************************************************
! Creation of data tables in an Oracle database:
 declarations
  tsucc: array ({false,true}) of string
 end-declarations
 tsucc(false):="failed"; tsucc(true):="succeeded"
 setparam("OCIdebug",true)
 OCIlogon(DB)
 writeln("Connection number: ",getparam("OCIconnection"))
 OCIexecute("drop table ProdDataOutH")
 OCIexecute("create table ProdDataOutH (IndexP varchar(10), IndexM integer, Cost float, Duration integer)")
 writeln(" - Create ProdDataOutH (",tsucc(getparam("OCIsuccess")),")")
 OCIexecute("drop table AllDataOutH")
 OCIexecute("create table AllDataOutH (IndexP varchar(10), IndexM integer, Cost float, Duration integer)")
 writeln(" - Create AllDataOutH (",tsucc(getparam("OCIsuccess")),")")
 OCIexecute("drop table CostOutH")
 OCIexecute("create table CostOutH (IndexP varchar(10), IndexM integer, Cost float)")
 writeln(" - Create CostOutH (",tsucc(getparam("OCIsuccess")),")")
 OCIexecute("drop table DurationOutH")
 OCIexecute("create table DurationOutH (IndexP varchar(10), IndexM integer, Duration integer)")
 writeln(" - Create DurationOutH (",tsucc(getparam("OCIsuccess")),")")
 OCIlogoff
 | 
| 
 | 
| recordout5.mos | 
| (!******************************************************
   Mosel Example Problems
   ====================== 
   file recordout5.mos
   ```````````````````
   Writing out records to spreadsheets.
   - Using 'initializations to' with the xls driver -
   
   (c) 2012 Fair Isaac Corporation
       author: S. Heipcke, Dec. 2012, rev. Feb. 2019
*******************************************************!)
model "Record output (generic spreadsheet)"
 uses "mmsheet", "mmsystem"
 parameters
  CSTR= 'mmsheet.xls:recorddata.xls'
!  CSTR= 'mmsheet.xlsx:recorddata.xlsx'
  FNAME2='recordout.xls'
  CSTR2= 'mmsheet.xls:skiph+;'+FNAME2
!  FNAME2='recordout.xlsx'
!  CSTR2= 'mmsheet.xlsx:skiph+;'+FNAME2
 end-parameters
 declarations
  PRODUCTS: set of string
  MACH: range
  ProdRec = record
   Cost: real
   Duration: integer
  end-record 
  PDATA: dynamic array(PRODUCTS,MACH) of ProdRec
  R = 1..9
  AllDataRec = record
   Product: string
   Mach: integer
   Cost: real
   Duration: integer
  end-record 
  ALLDATA: array(R) of AllDataRec
 end-declarations
! **** Reading data from a text file
 initializations from "recorddata.dat"
  PDATA as "ProdData"
  ALLDATA as "AllData"
 end-initializations
! **** Writing out into a spreadsheet with named ranges ****
! Write out complete records
! (This assumes that the output tables have been created previously.)
! Driver options: noindex - dense data
 initializations to CSTR
  PDATA as "ProdDataOut"
  ALLDATA as "noindex;AllDataOut"
 end-initializations
! Write out selected record fields
 initializations to CSTR
  PDATA(Cost) as "CostOut"
  ALLDATA(Product,Mach,Duration) as "noindex;DurationOut"
 end-initializations
! **** Writing out into a new spreadsheet file (without named ranges) ****
! Remove any copy of the output file created by previous runs
 fdelete(FNAME2)
! Driver option skiph+ enables addition of specified column titles in output
! Column ranges can be specified in various ways;
! if no sheet name is given the first sheet is used
 initializations to CSTR2
 ! Output complete records 
  PDATA as "grow;[OutputData$A:D](Product,Mach,Cost,Duration)"
  ALLDATA as "noindex;grow;[F:I](Product,Mach,Cost,Duration)"
 ! Output selected record fields
  PDATA(Cost) as "grow;[R1C11:R1C13](Product,Mach,Cost)"
  ALLDATA(Product,Mach,Duration) as "noindex;grow;[R1C15:R1C17](Product,Mach,Duration)"
 end-initializations
end-model
 | 
| 
 | 
| recordout6.mos | 
| (!******************************************************
   Mosel Example Problems
   ====================== 
   file recordout6.mos
   ```````````````````
   Writing out records to spreadsheets.
   - Using 'initializations to' with the csv driver -
   
   (c) 2012 Fair Isaac Corporation
       author: S. Heipcke, Dec. 2012, rev. Feb. 2019
*******************************************************!)
model "Record output (CSV)"
 uses "mmsheet", "mmsystem"
 parameters
  CSTR= 'mmsheet.csv:recorddataout.csv'
  FNAME2='recordout.csv'
  CSTR2= 'mmsheet.csv:skiph+;'+FNAME2
 end-parameters
 declarations
  PRODUCTS: set of string
  MACH: range
  ProdRec = record
   Cost: real
   Duration: integer
  end-record 
  PDATA: dynamic array(PRODUCTS,MACH) of ProdRec
  R = 1..9
  AllDataRec = record
   Product: string
   Mach: integer
   Cost: real
   Duration: integer
  end-record 
  ALLDATA: array(R) of AllDataRec
 end-declarations
! **** Reading data from a text file
 initializations from "recorddata.dat"
  PDATA as "ProdData"
  ALLDATA as "AllData"
 end-initializations
! **** Writing out into an existing file ****
! Write out complete records
! (This assumes that the output tables have been created previously.)
! Driver options: noindex - dense data
 initializations to CSTR
  PDATA as "[B4:E12]"
  ALLDATA as "noindex;[G4:J12]"
 end-initializations
! Write out selected record fields
 initializations to CSTR
  PDATA(Cost) as "[B17:D25]"
  ALLDATA(Product,Mach,Duration) as "noindex;[G17:I25]"
 end-initializations
! **** Writing out into a new file ****
! Remove any copy of the output file created by previous runs
 fdelete(FNAME2)
! Driver option skiph+ enables addition of specified column titles in output
! Column ranges can be specified in various ways
 initializations to CSTR2
 ! Output complete records 
  PDATA as "grow;[A:D](Product,Mach,Cost,Duration)"
  ALLDATA as "noindex;grow;[F:I](Product,Mach,Cost,Duration)"
 ! Output selected record fields
  PDATA(Cost) as "grow;[R1C11:R1C13](Product,Mach,Cost)"
  ALLDATA(Product,Mach,Duration) as "noindex;grow;[R1C15:R1C17](Product,Mach,Duration)"
 end-initializations
 
end-model
 | 
| 
 | 
| listinout.mos | 
| (!******************************************************
   Mosel Example Problems
   ====================== 
   file listinout.mos
   ``````````````````
   Reading/writing lists from/to
   spreadsheets or databases via ODBC.
   - Using 'initializations from' with odbc IO driver -
   
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, Nov. 2007, rev. Jan. 2014
*******************************************************!)
model "List handling (ODBC)"
 uses "mmodbc"
 parameters
                              ! Use Excel spreadsheet `listdata.xls'
!  CNCTIO = "listdata.xls"
                              ! Use Access database `listdata.mdb'
  CNCTIO = "debug;listdata.mdb"
                              ! Use mysql database `listdata' (not provided)
!  CNCTIO = "debug;DSN=mysql;DB=listdata"
                              ! Use SQLite database 'listdata.sqlite' directly 
!  CNCTIO = "debug;listdata.sqlite"
                              ! Use SQLite database 'listdata.sqlite' via ODBC
!  CNCTIO = "debug;DSN=sqlite;DATABASE=listdata.sqlite"
 end-parameters
 declarations
  R: range
  LI: list of integer
  A: integer
  LS,LS2: list of string
 end-declarations
 initializations from "mmodbc.odbc:"+CNCTIO
  LI as "List1"
  A
  LS as "List2"
 end-initializations 
! Display the lists
 writeln("LI: ", LI)
 writeln("A: ", A, ", LS: ", LS)
! Reverse the list LI
 reverse(LI)
! Append some text to every entry of LS 
 LS2:= sum(l in LS) [l+" "+A]
! Display the modified lists
 writeln("LI: ", LI)
 writeln("LS2: ", LS2)
 initializations to "mmodbc.odbc:"+CNCTIO
  LI as "List1Out"
  LS2 as "List2Out"
 end-initializations 
end-model
 | 
| 
 | 
| listinout1.mos | 
| (!******************************************************
   Mosel Example Problems
   ====================== 
   file listinout1.mos
   ```````````````````
   Reading/writing lists from/to text files.
   
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, Nov. 2007
*******************************************************!)
model "List handling (Text file)"
 declarations
  R: range
  LI: list of integer
  LS,LS2: array(R) of list of string   ! With text data files we can use
                                       ! compositions of structured types
 end-declarations
 initializations from "listdata.dat"
  LI as "List1"
  LS as "List2"
 end-initializations 
! Display the lists
 writeln("LI: ", LI)
 writeln("LS: ", LS)
! Reverse the list LI
 reverse(LI)
! Append some text to every entry of LS 
 forall(i in R) LS2(i):= sum(l in LS(i)) [l+" year"+i]
! Display the modified lists
 writeln("LI: ", LI)
 writeln("LS2: ", LS2)
 initializations to "listout.dat"
  LI as "List1Out"
  LS2 as "List2Out"
 end-initializations 
end-model
 | 
| 
 | 
| listinout2.mos | 
| (!******************************************************
   Mosel Example Problems
   ====================== 
   file listinout2.mos
   ```````````````````
   Reading/writing lists from/to
   spreadsheets or databases via ODBC.
   - Using SQL commands -
   
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, Nov. 2007, rev. Sep. 2018
*******************************************************!)
model "List handling (SQL)"
 uses "mmodbc"
 parameters
                              ! Use Excel spreadsheet `listdata.xls'
!  CNCT = 'DSN=Excel Files;DBQ=' + getparam("workdir") + '/listdata.xls'
!  CNCT = 'listdata.xls'
                              ! Use Access database `listdata.mdb'
!  CNCT = 'DSN=MS Access Database;DBQ=C:/xpress/examples/mosel/WhitePapers/MoselData/listdata.mdb'
  CNCT = 'listdata.mdb'
                              ! Use mysql database `listdata' (not provided)
!  CNCT = 'DSN=mysql;DB=listdata'
                              ! Use SQLite database 'listdata.sqlite' via ODBC
!  CNCT = 'DSN=sqlite;DATABASE=listdata.sqlite'
                              ! Use SQLite database 'listdata.sqlite' directly 
!  CNCT = "listdata.sqlite"
 end-parameters
 declarations
  R: range
  LI: list of integer
  A: integer
  LS,LS2: list of string
 end-declarations
 setparam("SQLverbose",true)
 SQLconnect(CNCT)
 SQLexecute("select * from List1", LI)
 A:= SQLreadinteger("select * from A")
 SQLexecute("select * from List2", LS)
! Display the lists
 writeln("LI: ", LI)
 writeln("A: ", A, ", LS: ", LS)
! Reverse the list LI
 reverse(LI)
! Append some text to every entry of LS 
 LS2:= sum(l in LS) [l+" "+A]
! Display the modified lists
 writeln("LI: ", LI)
 writeln("LS2: ", LS2)
 SQLexecute("delete from List1Out")     ! Cleaning up previous results: works
 SQLexecute("delete from List2Out")     ! only for databases, cannot be used
                                        ! with spreadsheets (instead, delete
                                        ! previous solutions directly in the
                                        ! spreadsheet file)
 SQLexecute("insert into List1Out values (?)", LI)
 SQLexecute("insert into List2Out values (?)", LS2)
 SQLdisconnect
end-model
 | 
| 
 | 
| listinout3.mos | 
| (!******************************************************
   Mosel Example Problems
   ====================== 
   file listinout3.mos
   ```````````````````
   Reading/writing lists from/to
   spreadsheets or databases via ODBC.
   - Using 'initializations from' with the excel driver -
   
   (c) 2008 Fair Isaac Corporation
       author: S. Heipcke, Nov. 2007, rev. Dec. 2012
*******************************************************!)
model "List handling (Excel)"
 uses "mmsheet"
 parameters
  CSTR = 'mmsheet.excel:listdata.xls'
 end-parameters
 
 declarations
  R: range
  LI: list of integer
  A: integer
  LS,LS2: list of string
 end-declarations
 initializations from CSTR
  LI as "List1E"
  A as "AE"
  LS as "List2E"
 end-initializations 
! Display the lists
 writeln("LI: ", LI)
 writeln("A: ", A, ", LS: ", LS)
! Reverse the list LI
 reverse(LI)
! Append some text to every entry of LS
 LS2:= sum(l in LS) [l+" "+A]
! Display the modified lists
 writeln("LI: ", LI)
 writeln("LS2: ", LS2)
 initializations to CSTR
  LI as "List1EOut"
  LS2 as "List2EOut"             ! Output into a row
  LS2 as "grow;List2EGOut"       ! Output into a column
 end-initializations
end-model
 | 
| 
 | 
| listinout4.mos | 
| (!******************************************************
   Mosel Example Problems
   ====================== 
   file listinout4.mos
   ```````````````````
   Reading/writing lists from/to
   an Oracle database.
   - Using 'initializations' and OCI statements -
   
   (c) 2012 Fair Isaac Corporation
       author: S. Heipcke, Dec. 2012
*******************************************************!)
model "List handling (OCI)"
 uses "mmoci"
 parameters
  DB="myname/mypassword@dbname"     ! Login to Oracle database (not provided)
 end-parameters
 declarations
  R: range
  LI: list of integer
  A: integer
  LS,LS2: list of string
 end-declarations
 
! **** Using SQL statements ****
 setparam("OCIdebug",true)
 OCIlogon(DB)
 writeln("Connection number: ",getparam("OCIconnection"))
 OCIexecute("select * from List1 ", LI)
 A:=OCIreadinteger("select * from A")
 OCIexecute("select * from List2 ", LS)
 
! Display the lists
 writeln("LI: ", LI)
 writeln("A: ", A, ", LS: ", LS)
 
! Reverse the list LI
 reverse(LI)
! Append some text to every entry of LS 
 LS2:= sum(l in LS) [l+" "+A]
! Display the modified lists
 writeln("LI: ", LI)
 writeln("LS2: ", LS2)
 OCIexecute("delete from List1Out")     ! Cleaning up previous output   
 OCIexecute("delete from List2Out")
 OCIexecute("insert into List1Out values (:1)", LI)
 OCIexecute("insert into List2Out values (:1)", LS2)
 
 OCIlogoff
! **** Using 'initializations from' ****
 initializations from "mmoci.oci:debug;"+DB
  LI as "List1"
  A
  LS as "List2"
 end-initializations 
! Display the lists
 writeln("LI: ", LI)
 writeln("A: ", A, ", LS: ", LS)
! Reverse the list LI
 reverse(LI)
! Append some text to every entry of LS 
 LS2:= sum(l in LS) [l+" "+A]
! Display the modified lists
 writeln("LI: ", LI)
 writeln("LS2: ", LS2)
 initializations to "mmoci.oci:"+DB
  LI as "List1Out"
  LS2 as "List2Out"
 end-initializations 
end-model
**************************************************
! Creation of data tables in an Oracle database:
 declarations
  tsucc: array ({false,true}) of string
 end-declarations
 tsucc(false):="failed"; tsucc(true):="succeeded"
 setparam("OCIdebug",true)
 OCIlogon(DB)
 writeln("Connection number: ",getparam("OCIconnection"))
 OCIexecute("create table List1 (ListValues integer)")
 writeln(" - Create List1 (",tsucc(getparam("OCIsuccess")),")")
 OCIexecute("insert into List1 (ListValues) values (:1)", [ 1,2,3,4,5,6,7,8 ])
 writeln(" - Insert values into List1 (",tsucc(getparam("OCIsuccess")),",",
        getparam("OCIrowcnt"),'/',getparam("OCIrowxfr")," rows)")
 
 OCIexecute("create table A (AValue integer)")
 writeln(" - Create A (",tsucc(getparam("OCIsuccess")),")")
 OCIexecute("insert into A (AValue) values (:1)", [ 2002 ])
 writeln(" - Insert values into A (",tsucc(getparam("OCIsuccess")),",",
        getparam("OCIrowcnt"),'/',getparam("OCIrowxfr")," rows)")
 
 OCIexecute("create table List2 (ListValues char(3))")
 writeln(" - Create List2 (",tsucc(getparam("OCIsuccess")),")")
 OCIexecute("insert into List2 (ListValues) values (:1)", [ Jan,May,Jul,Nov,Dec ])
 writeln(" - Insert values into List2 (",tsucc(getparam("OCIsuccess")),",",
        getparam("OCIrowcnt"),'/',getparam("OCIrowxfr")," rows)")
 
 OCIexecute("create table List1Out (ListValues integer)")
 writeln(" - Create List1Out (",tsucc(getparam("OCIsuccess")),")")
 OCIexecute("create table List2Out (ListValues char(10))")
 writeln(" - Create List2Out (",tsucc(getparam("OCIsuccess")),")")
 
 OCIlogoff
 | 
| 
 | 
| listinout5.mos | 
| (!******************************************************
   Mosel Example Problems
   ====================== 
   file listinout5.mos
   ```````````````````
   Reading/writing lists from/to spreadsheets.
   - Using 'initializations from' with the xls driver -
   
   (c) 2012 Fair Isaac Corporation
       author: S. Heipcke, Dec. 2012
*******************************************************!)
model "List handling (generic spreadsheet)"
 uses "mmsheet"
 parameters
!  CSTR= 'mmsheet.xls:listdata.xls'
  CSTR= 'mmsheet.xlsx:listdata.xlsx'
 end-parameters
 
 declarations
  R: range
  LI: list of integer
  A: integer
  LS,LS2: list of string
 end-declarations
 initializations from CSTR
  LI as "List1E"
  A as "AE"
  LS as "List2E"
 end-initializations 
! Display the lists
 writeln("LI: ", LI)
 writeln("A: ", A, ", LS: ", LS)
! Reverse the list LI
 reverse(LI)
! Append some text to every entry of LS
 LS2:= sum(l in LS) [l+" "+A]
! Display the modified lists
 writeln("LI: ", LI)
 writeln("LS2: ", LS2)
 initializations to CSTR
  LI as "List1EOut"
  LS2 as "List2EOut"             ! Output into a row
  LS2 as "grow;List2EGOut"       ! Output into a column
 end-initializations
end-model
 | 
| 
 | 
| listinout6.mos | 
| (!******************************************************
   Mosel Example Problems
   ====================== 
   file listinout6.mos
   ```````````````````
   Reading/writing lists from/to spreadsheets.
   - Using 'initializations from' with the csv driver -
   
   (c) 2012 Fair Isaac Corporation
       author: S. Heipcke, Dec. 2012
*******************************************************!)
model "List handling (CSV)"
 uses "mmsheet"
 parameters
  CSTR_IN= 'mmsheet.csv:listdata.csv'
  CSTR_OUT= 'mmsheet.csv:listdataout.csv'
 end-parameters
 
 declarations
  R: range
  LI: list of integer
  A: integer
  LS,LS2: list of string
 end-declarations
 initializations from CSTR_IN
  LI as "[B4:I4]"
  A as "[K4]"
  LS as "[L4:P4]"
 end-initializations 
! Display the lists
 writeln("LI: ", LI)
 writeln("A: ", A, ", LS: ", LS)
! Reverse the list LI
 reverse(LI)
! Append some text to every entry of LS
 LS2:= sum(l in LS) [l+" "+A]
! Display the modified lists
 writeln("LI: ", LI)
 writeln("LS2: ", LS2)
 initializations to CSTR_OUT
  LI as "[B3:I3]"
  LS2 as "[K3:O3]"                 ! Output into a row
  LS2 as "grow;[K6]"               ! Output into a column
 end-initializations
end-model
 | 
| 
 |