34 #define AED_REAL real(KIND=R4) 36 #define AED_REAL real(KIND=R8) 47 CHARACTER(len=bufsize) :: buf
59 CHARACTER,
POINTER :: sym(:)
64 CHARACTER(len=1),
parameter ::
eoln=achar(10)
65 CHARACTER(len=1),
parameter ::
ctab=achar(8)
66 CHARACTER(len=1),
parameter ::
cnul=achar(0)
132 inquire(unit=lun, opened=opened)
133 IF ( .not. opened )
THEN 149 CHARACTER(len=*),
INTENT(in) :: filename
158 IF ( lun .GT. 0 )
open(lun, status=
'old', file=filename, iostat=iostat)
160 IF (iostat .NE. 0) lun = -1
173 CHARACTER(len=*),
INTENT(in) :: filename
182 lun =
fopen(filename)
183 IF ( lun .gt. 0 )
THEN 202 CHARACTER,
INTENT(in) :: ch
203 CHARACTER(len=*),
INTENT(in) :: str
204 INTEGER,
optional,
INTENT(in) :: s
218 DO WHILE ( (str(res:res) .NE. ch) .AND. (res .LE. lnt) )
221 IF (res .GT. lnt) res = 0
237 INTEGER :: iostat, s1, e1, i, j
239 CHARACTER(len=4) :: term
244 IF (
ASSOCIATED(sym%sym) )
DEALLOCATE(sym%sym)
249 IF (aedr%buf_pos .GE. 0)
THEN 250 IF (aedr%buf_pos .GT. aedr%buf_len)
THEN 267 DO WHILE ( (aedr%buf_pos .LE. 0) .OR. (aedr%buf_pos .GT. aedr%buf_len) )
268 read(unit=aedr%lun,fmt=
'(A)', iostat=iostat) aedr%buf
269 IF ( iostat .NE. 0)
RETURN 271 aedr%buf_len=len_trim(aedr%buf)
272 IF ( (aedr%buf_len .GT. 0) .AND. &
273 (aedr%buf(1:1) .NE.
'#') .AND. &
274 (aedr%buf(1:1) .NE.
'!') )
THEN 284 DO WHILE( ( (aedr%buf(s1:s1) .EQ.
' ') .OR. &
285 (aedr%buf(s1:s1) .EQ.
ctab) .OR. &
286 (aedr%buf(s1:s1) .EQ.
cnul) .OR. &
287 (aedr%buf(s1:s1) .EQ.
eoln) ) .AND. &
288 (s1 .LE. aedr%buf_len) )
293 IF (aedr%buf(s1:s1) .EQ.
'#')
THEN 295 aedr%buf_pos=aedr%buf_len+1
299 IF (aedr%buf(s1:s1) .EQ.
'"') quot=
'"' 300 IF (aedr%buf(s1:s1) .EQ.
"'") quot=
"'" 302 IF (quot .NE.
cnul)
THEN 306 DO WHILE((e1 .LE. aedr%buf_len) .AND. (aedr%buf(e1:e1) .NE. quot))
311 DO WHILE((e1 .LE. aedr%buf_len) .AND. (
char_in_str(aedr%buf(e1:e1),term) .EQ. 0))
317 ALLOCATE(sym%sym(e1-s1))
321 sym%sym(j:j)=aedr%buf(i:i)
325 IF (quot .NE.
cnul) e1=e1+1
327 if (aedr%buf(e1:e1) ==
",") e1 = e1+1
346 close(aedr%lun, iostat=iostat)
348 end_parse=(iostat .eq. 0)
362 DOUBLE PRECISION :: num
363 CHARACTER(len=80) :: tbuf
371 tbuf(sym%length+1:)=
' ' 384 CHARACTER(len=*),
INTENT(inout) :: name
393 name(i:i) = sym%sym(i)
403 TYPE(
aed_reader),
POINTER,
INTENT(inout) :: aedr
404 CHARACTER(len=32),
POINTER :: titles(:)
416 IF ( sym%sym(1) .EQ.
eoln )
THEN 421 ALLOCATE(titles(count))
424 IF ( sym%sym(1) .EQ.
eoln )
RETURN 440 CHARACTER(*),
INTENT(in) :: fname
441 CHARACTER(len=32),
DIMENSION(:),
POINTER :: names
442 INTEGER,
INTENT(out) :: ncols
454 write(lu, *)
"Failed to open file '",fname,
"'" 458 IF ( .NOT.
ASSOCIATED(
units(i)%p) )
THEN 464 IF ( unit == 0 )
THEN 480 INTEGER,
INTENT(in) :: unit
481 aed_real,
DIMENSION(:),
ALLOCATABLE,
INTENT(inout) :: values
490 aedr =>
units(unit)%p
496 IF ( sym%sym(1) .EQ.
eoln )
EXIT 500 IF ( i > 0 .AND. i /= ncols ) &
501 write(lu,*)
"data row had ", i,
" columns : expecting ", ncols
512 INTEGER,
INTENT(in) :: unit
519 aedr =>
units(unit)%p
523 units(unit)%p => aedr
character(len=1), parameter cnul
type(arp), dimension(10) units
integer, parameter bufsize
character(len=32), dimension(0:32) t_strs
character(len=1), parameter ctab
character(len=1), parameter eoln