FICO
FICO Xpress Optimization Examples Repository
FICO Optimization Community FICO Xpress Optimization Home
Back to examples browserPrevious exampleNext example

Reading and writing union types

Description
A union is a container capable of holding an object of one of a predefined set of types. Its declaration specifies the set of compatible types or the predefined union type 'any'. The examples display the resulting types when populating union type entities from external data sources. It is also shown how to convert the type of union entities from textual types to 'date' or 'time' types as defined by the Mosel module mmsystem.
  • The model version in unioninout1.mos shows how to work with Mosel's text data file format.
  • Databases can be accessed from Mosel through an ODBC connection using the odbc driver (unioninout.mos) or with SQL statements (unioninout2.mos).
  • For Oracle databases a software-specific connection is provided by the module mmoci (unioninout4.mos).
  • Microsoft Excel spreadsheets can be accessed via the software-specific driver excel (unioninout3.mos). Alternatively, models can use the dedicated I/O drivers xsl/xlsx (unioninout5.mos) from the mmsheet module that support manipulating spreadsheet files on various platforms without having to install Microsoft Excel.
  • Module mmsheet also provides an I/O driver for csv files (unioninout6.mos).
Further explanation of this example: Xpress Whitepaper 'Using ODBC and other database interfaces with Mosel', Section Examples - Working with union types.


Source Files

Data Files





unioninout1.mos

(!******************************************************
   Mosel Example Problems
   ====================== 

   file unioninout1.mos
   ````````````````````
   Reading/writing unions from/to text files.
   
   (c) 2021 Fair Isaac Corporation
       author: S. Heipcke, Apr. 2021
*******************************************************!)
model "Union handling (Text file)"
uses 'mmsystem'

 parameters
  CSTR= 'uniondatain.dat'
  CSTR_OUT= 'uniondataout.dat'
 end-parameters
 
 declarations
   L,L2: list of any
   LU: list of text or real
   LU2: list of text or real or boolean
 end-declarations

! Date and time formats
 setparam("timefmt", "%0H:%0M:%0S")
 setparam("datefmt", "%0d-%N-%0y")

! Reading data of different types from a text file
 initializations from CSTR
   L 
   L2
 end-initializations

 write("L orig: ")
 forall(i in L) write (i,": ", i.typeid, "; ")
 writeln
! Date and time types are read in textual form
 L(6).date:=date(L(6).string)
 L(7).time:=time(L(7).string)
 write("L new:  ")
 forall(i in L) write (i,": ", i.typeid, "; ")
 writeln

 initializations from CSTR
!   LU as "L"         ! This will fail on Boolean constants
   LU
   LU2 as "L"
 end-initializations
! List defined with a restricted set of types
 write("LU:     ")
 forall(i in LU) write (i,": ", i.typeid, "; ")
 writeln
 write("LU2:    ")
 forall(i in LU2) write (i,": ", i.typeid, "; ")
 writeln

 ! Contents formated as 'text'
 write("L2:     ")
 forall(i in L2) write (i,": ", i.typeid, "; ")
 writeln

 ! Writing data of type 'any' to a text file
 initializations to CSTR_OUT
   L
   LU
 end-initializations
end-model

Back to examples browserPrevious exampleNext example