avoid errors related to CRLF (windows) file endings
This commit is contained in:
parent
d5c98bbf62
commit
5b8e199627
21
src/IO.f90
21
src/IO.f90
|
@ -65,8 +65,8 @@ end subroutine IO_init
|
||||||
function IO_readlines(fileName) result(fileContent)
|
function IO_readlines(fileName) result(fileContent)
|
||||||
|
|
||||||
character(len=*), intent(in) :: fileName
|
character(len=*), intent(in) :: fileName
|
||||||
|
|
||||||
character(len=pStringLen), dimension(:), allocatable :: fileContent !< file content, separated per lines
|
character(len=pStringLen), dimension(:), allocatable :: fileContent !< file content, separated per lines
|
||||||
|
|
||||||
character(len=pStringLen) :: line
|
character(len=pStringLen) :: line
|
||||||
character(len=:), allocatable :: rawData
|
character(len=:), allocatable :: rawData
|
||||||
integer :: &
|
integer :: &
|
||||||
|
@ -75,6 +75,7 @@ function IO_readlines(fileName) result(fileContent)
|
||||||
l
|
l
|
||||||
logical :: warned
|
logical :: warned
|
||||||
|
|
||||||
|
|
||||||
rawData = IO_read(fileName)
|
rawData = IO_read(fileName)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
@ -112,17 +113,20 @@ end function IO_readlines
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief Read whole file.
|
!> @brief Read whole file.
|
||||||
!> @details ensures that the string ends with a new line (expected UNIX behavior)
|
!> @details ensures that the string ends with a new line (expected UNIX behavior) and rejects
|
||||||
|
! windows (CRLF) line endings
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
function IO_read(fileName) result(fileContent)
|
function IO_read(fileName) result(fileContent)
|
||||||
|
|
||||||
character(len=*), intent(in) :: fileName
|
character(len=*), intent(in) :: fileName
|
||||||
character(len=:), allocatable :: fileContent
|
character(len=:), allocatable :: fileContent
|
||||||
|
|
||||||
integer :: &
|
integer :: &
|
||||||
fileLength, &
|
fileLength, &
|
||||||
fileUnit, &
|
fileUnit, &
|
||||||
myStat
|
myStat
|
||||||
|
|
||||||
|
|
||||||
inquire(file = fileName, size=fileLength)
|
inquire(file = fileName, size=fileLength)
|
||||||
open(newunit=fileUnit, file=fileName, access='stream',&
|
open(newunit=fileUnit, file=fileName, access='stream',&
|
||||||
status='old', position='rewind', action='read',iostat=myStat)
|
status='old', position='rewind', action='read',iostat=myStat)
|
||||||
|
@ -137,6 +141,8 @@ function IO_read(fileName) result(fileContent)
|
||||||
if(myStat /= 0) call IO_error(102,ext_msg=trim(fileName))
|
if(myStat /= 0) call IO_error(102,ext_msg=trim(fileName))
|
||||||
close(fileUnit)
|
close(fileUnit)
|
||||||
|
|
||||||
|
if(scan(fileContent,achar(13)) /= 0) call IO_error(115)
|
||||||
|
|
||||||
if(fileContent(fileLength:fileLength) /= IO_EOL) fileContent = fileContent//IO_EOL ! ensure EOL@EOF
|
if(fileContent(fileLength:fileLength) /= IO_EOL) fileContent = fileContent//IO_EOL ! ensure EOL@EOF
|
||||||
|
|
||||||
end function IO_read
|
end function IO_read
|
||||||
|
@ -151,6 +157,7 @@ logical pure function IO_isBlank(string)
|
||||||
|
|
||||||
integer :: posNonBlank
|
integer :: posNonBlank
|
||||||
|
|
||||||
|
|
||||||
posNonBlank = verify(string,IO_WHITESPACE)
|
posNonBlank = verify(string,IO_WHITESPACE)
|
||||||
IO_isBlank = posNonBlank == 0 .or. posNonBlank == scan(string,IO_COMMENT)
|
IO_isBlank = posNonBlank == 0 .or. posNonBlank == scan(string,IO_COMMENT)
|
||||||
|
|
||||||
|
@ -170,6 +177,7 @@ pure function IO_stringPos(string)
|
||||||
|
|
||||||
integer :: left, right
|
integer :: left, right
|
||||||
|
|
||||||
|
|
||||||
allocate(IO_stringPos(1), source=0)
|
allocate(IO_stringPos(1), source=0)
|
||||||
right = 0
|
right = 0
|
||||||
|
|
||||||
|
@ -249,6 +257,7 @@ pure function IO_lc(string)
|
||||||
|
|
||||||
integer :: i,n
|
integer :: i,n
|
||||||
|
|
||||||
|
|
||||||
do i=1,len(string)
|
do i=1,len(string)
|
||||||
n = index(UPPER,string(i:i))
|
n = index(UPPER,string(i:i))
|
||||||
if(n/=0) then
|
if(n/=0) then
|
||||||
|
@ -271,6 +280,7 @@ function IO_rmComment(line)
|
||||||
character(len=:), allocatable :: IO_rmComment
|
character(len=:), allocatable :: IO_rmComment
|
||||||
integer :: split
|
integer :: split
|
||||||
|
|
||||||
|
|
||||||
split = index(line,IO_COMMENT)
|
split = index(line,IO_COMMENT)
|
||||||
|
|
||||||
if (split == 0) then
|
if (split == 0) then
|
||||||
|
@ -292,6 +302,7 @@ integer function IO_stringAsInt(string)
|
||||||
integer :: readStatus
|
integer :: readStatus
|
||||||
character(len=*), parameter :: VALIDCHARS = '0123456789+- '
|
character(len=*), parameter :: VALIDCHARS = '0123456789+- '
|
||||||
|
|
||||||
|
|
||||||
valid: if (verify(string,VALIDCHARS) == 0) then
|
valid: if (verify(string,VALIDCHARS) == 0) then
|
||||||
read(string,*,iostat=readStatus) IO_stringAsInt
|
read(string,*,iostat=readStatus) IO_stringAsInt
|
||||||
if (readStatus /= 0) call IO_error(111,ext_msg=string)
|
if (readStatus /= 0) call IO_error(111,ext_msg=string)
|
||||||
|
@ -313,6 +324,7 @@ real(pReal) function IO_stringAsFloat(string)
|
||||||
integer :: readStatus
|
integer :: readStatus
|
||||||
character(len=*), parameter :: VALIDCHARS = '0123456789eE.+- '
|
character(len=*), parameter :: VALIDCHARS = '0123456789eE.+- '
|
||||||
|
|
||||||
|
|
||||||
valid: if (verify(string,VALIDCHARS) == 0) then
|
valid: if (verify(string,VALIDCHARS) == 0) then
|
||||||
read(string,*,iostat=readStatus) IO_stringAsFloat
|
read(string,*,iostat=readStatus) IO_stringAsFloat
|
||||||
if (readStatus /= 0) call IO_error(112,ext_msg=string)
|
if (readStatus /= 0) call IO_error(112,ext_msg=string)
|
||||||
|
@ -331,6 +343,7 @@ logical function IO_stringAsBool(string)
|
||||||
|
|
||||||
character(len=*), intent(in) :: string !< string for conversion to int value
|
character(len=*), intent(in) :: string !< string for conversion to int value
|
||||||
|
|
||||||
|
|
||||||
if (trim(adjustl(string)) == 'True' .or. trim(adjustl(string)) == 'true') then
|
if (trim(adjustl(string)) == 'True' .or. trim(adjustl(string)) == 'true') then
|
||||||
IO_stringAsBool = .true.
|
IO_stringAsBool = .true.
|
||||||
elseif (trim(adjustl(string)) == 'False' .or. trim(adjustl(string)) == 'false') then
|
elseif (trim(adjustl(string)) == 'False' .or. trim(adjustl(string)) == 'false') then
|
||||||
|
@ -356,6 +369,7 @@ subroutine IO_error(error_ID,el,ip,g,instance,ext_msg)
|
||||||
character(len=:), allocatable :: msg
|
character(len=:), allocatable :: msg
|
||||||
character(len=pStringLen) :: formatString
|
character(len=pStringLen) :: formatString
|
||||||
|
|
||||||
|
|
||||||
select case (error_ID)
|
select case (error_ID)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
@ -382,6 +396,9 @@ subroutine IO_error(error_ID,el,ip,g,instance,ext_msg)
|
||||||
msg = 'invalid character for logical:'
|
msg = 'invalid character for logical:'
|
||||||
case (114)
|
case (114)
|
||||||
msg = 'cannot decode base64 string:'
|
msg = 'cannot decode base64 string:'
|
||||||
|
case (115)
|
||||||
|
msg = 'found CR. Windows file endings (CRLF) are not supported.'
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! lattice error messages
|
! lattice error messages
|
||||||
|
|
Loading…
Reference in New Issue