TableWriteToFile Subroutine

private subroutine TableWriteToFile(tab, file, append)

write a table on file. Arguments: tab table to export file file to whom write the table

Arguments

Type IntentOptional Attributes Name
type(Table), intent(in) :: tab
character(len=*), intent(in) :: file
logical, intent(in), optional :: append

Variables

Type Visibility Attributes Name Initial
logical, public :: fileExists
integer(kind=long), public :: i
integer(kind=short), public :: iunit
integer(kind=long), public :: j

Source Code

SUBROUTINE TableWriteToFile &
( tab, file, append )

! Module used:
USE StringManipulation, ONLY: &
! imported routines:
StringCompact

USE Utilities, ONLY: &
!Imported routines:
GetUnit

IMPLICIT NONE

! Function arguments
! Scalar arguments with intent(in):
CHARACTER (LEN = *),  INTENT (IN) :: file
LOGICAL, OPTIONAL, INTENT (IN) :: append

! Type defined arguments with intent (in):
TYPE (Table), INTENT (IN) :: tab


!Local variables:
INTEGER (KIND = short) :: iunit
INTEGER (KIND = long)  :: i, j
LOGICAL                :: fileExists

!------------end of declaration------------------------------------------------


!if append option is present, file already exists
fileExists = .FALSE.
IF ( PRESENT (append) ) THEN
    IF (append) THEN
        fileExists = .TRUE.
    END IF
END IF

!get a free fortran unit
iunit = GetUnit ()

IF (fileExists) THEN
    OPEN (UNIT = iunit, FILE = file, STATUS = "old")
    !sync to the last line
    CALL FileSyncToLastLine ( iunit, 2 )
ELSE
    OPEN (UNIT = iunit, FILE = file, STATUS = "unknown")
END IF
    
!write keyword for start table
WRITE(iunit,'(a)') 'Table Start'

!write title if exists
IF ( StringCompact ( tab % title ) /= '' ) THEN
  WRITE(iunit,'(a7)', ADVANCE = 'no') 'Title: ' 
  WRITE(iunit,'(a)') TRIM (tab % title)
END IF

!write id
WRITE(iunit,'(a4)', ADVANCE = 'no') 'Id: ' 
WRITE(iunit,'(a)') TRIM (tab % id)

!write column headers
WRITE(iunit,'(a9)', ADVANCE = 'no') 'Columns: '
DO i = 1, tab % noCols - 1
  WRITE(iunit,'(a1,a,a2)', ADVANCE = 'no') '[', TRIM (tab % col (i) % header ), '] ' 
END DO
WRITE(iunit,'(a1,a,a1)') '[', TRIM (tab % col (tab % noCols) % header ), ']' 

!write column unit
WRITE(iunit,'(a7)', ADVANCE = 'no') 'Units: '
DO i = 1, tab % noCols - 1
  WRITE(iunit,'(a1,a,a2)', ADVANCE = 'no') '[', TRIM (tab % col (i) % unit ), '] ' 
END DO
WRITE(iunit,'(a1,a,a1)') '[', TRIM (tab % col (tab % noCols) % unit ), ']'

!write content
DO i = 1, tab % noRows
  DO j = 1, tab % noCols - 1
    WRITE(iunit,'(a)', ADVANCE = 'no')  TRIM (tab % col (j) % row (i) ) // ' '
  END DO
  WRITE(iunit,'(a)') TRIM (tab % col (tab % noCols) % row (i) )
END DO

!write keyword for close table
WRITE(iunit,'(a)') 'Table End'

CLOSE (iunit)

END SUBROUTINE TableWriteToFile