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





unioninout6.mos

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

   file unioninout6.mos
   ````````````````````
   Reading/writing unions from/to spreadsheets.
   - Using 'initializations from' with the csv driver -
   
   (c) 2021 Fair Isaac Corporation
       author: S. Heipcke, Apr. 2021
*******************************************************!)
model "Union handling (CSV)"
 uses "mmsheet", "mmsystem"

 parameters
  CSTR_IN= 'mmsheet.csv:uniondata.csv'
  CSTR_IN2= 'mmsheet.csv:uniondata2.csv'
  CSTR_OUT= 'mmsheet.csv:uniondataout.csv'
 end-parameters
 
 declarations
   L,L2: list of any
   LU: list of text or real
 end-declarations

! Reading data of different types from a CSV file
 initializations from CSTR_IN
   L as "skiph;[]"
   LU as "skiph;[]"
 end-initializations

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

! List defined with a restricted set of types
 write("LU:     ")
 forall(i in LU) write (i,": ", i.typeid, "; ")
 writeln

 ! Quoted (simple double quotes) CSV contents results in same types as for 'L'
 initializations from CSTR_IN2
   L2 as "[]"
 end-initializations
 write("L2:     ")
 forall(i in L2) write (i,": ", i.typeid, "; ")
 writeln

 ! Writing data of type 'any' to a CSV file
 initializations to CSTR_OUT
   L as "[]"
   LU as "[R1C3:R1C"+(2+LU.size)+"]"
 end-initializations

end-model

Back to examples browserPrevious exampleNext example