Write a single string stream into file.
For unformatted read only access='stream' is supported with new_line as line terminator.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| character(len=*), | intent(in) | :: | file | File name. |
||
| type(string), | intent(in) | :: | lines(1:) | The lines. |
||
| character(len=*), | intent(in), | optional | :: | form | Format of unit. |
|
| integer, | intent(out), | optional | :: | iostat | IO status code. |
|
| character(len=*), | intent(inout), | optional | :: | iomsg | IO status message. |
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed arrows point from an interface to procedures which implement that interface. This could include the module procedures in a generic interface or the implementation in a submodule of an interface in a parent module.
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed arrows point from an interface to procedures which implement that interface. This could include the module procedures in a generic interface or the implementation in a submodule of an interface in a parent module.
subroutine write_file(file, lines, form, iostat, iomsg)
!---------------------------------------------------------------------------------------------------------------------------------
!< Write a single string stream into file.
!<
!< @note For unformatted read only `access='stream'` is supported with new_line as line terminator.
!---------------------------------------------------------------------------------------------------------------------------------
character(len=*), intent(in) :: file !< File name.
type(string), intent(in) :: lines(1:) !< The lines.
character(len=*), intent(in), optional :: form !< Format of unit.
integer, intent(out), optional :: iostat !< IO status code.
character(len=*), intent(inout), optional :: iomsg !< IO status message.
type(string) :: form_ !< Format of unit, local variable.
integer :: iostat_ !< IO status code, local variable.
character(len=:), allocatable :: iomsg_ !< IO status message, local variable.
integer :: unit !< Logical unit.
!---------------------------------------------------------------------------------------------------------------------------------
!---------------------------------------------------------------------------------------------------------------------------------
iomsg_ = repeat(' ', 99) ; if (present(iomsg)) iomsg_ = iomsg
form_ = 'FORMATTED' ; if (present(form)) form_ = form ; form_ = form_%upper()
select case(form_%chars())
case('FORMATTED')
open(newunit=unit, file=file, action='WRITE', iomsg=iomsg_, iostat=iostat_, err=10)
case('UNFORMATTED')
open(newunit=unit, file=file, action='WRITE', form='UNFORMATTED', access='STREAM', iomsg=iomsg_, iostat=iostat_, err=10)
endselect
call write_lines(unit=unit, lines=lines, form=form, iomsg=iomsg_, iostat=iostat_)
10 close(unit)
if (present(iostat)) iostat = iostat_
if (present(iomsg)) iomsg = iomsg_
return
!---------------------------------------------------------------------------------------------------------------------------------
endsubroutine write_file