@@ -323,22 +323,38 @@ end subroutine read_csv_file
323
323
!
324
324
! Use `initialize` to set options for the CSV file.
325
325
326
- subroutine open_csv_file (me ,filename ,n_cols ,status_ok )
326
+ subroutine open_csv_file (me ,filename ,n_cols ,status_ok , append )
327
327
328
328
implicit none
329
329
330
- class(csv_file),intent (inout ) :: me
331
- character (len=* ),intent (in ) :: filename ! ! the CSV file to open
332
- integer ,intent (in ) :: n_cols ! ! number of columns in the file
333
- logical ,intent (out ) :: status_ok ! ! status flag
330
+ class(csv_file),intent (inout ) :: me
331
+ character (len=* ),intent (in ) :: filename ! ! the CSV file to open
332
+ integer ,intent (in ) :: n_cols ! ! number of columns in the file
333
+ logical ,intent (out ) :: status_ok ! ! status flag
334
+ logical ,intent (in ),optional :: append ! ! append if file exists
334
335
335
- integer :: istat ! ! open `iostat` flag
336
+ integer :: istat ! ! open `iostat` flag
337
+ logical :: append_flag ! ! local copy of `append` argument
338
+ logical :: file_exists ! ! if the file exists
336
339
337
340
call me% destroy()
338
341
339
342
me% n_cols = n_cols
340
343
341
- open (newunit= me% iunit,file= filename,status= ' REPLACE' ,iostat= istat)
344
+ ! optional append argument:
345
+ append_flag = .false.
346
+ file_exists = .false.
347
+ if (present (append)) then
348
+ append_flag = append
349
+ if (append) inquire (file= filename, exist= file_exists)
350
+ end if
351
+
352
+ if (append_flag .and. file_exists) then
353
+ open (newunit= me% iunit,file= filename,status= ' OLD' ,position= ' APPEND' ,iostat= istat)
354
+ else
355
+ open (newunit= me% iunit,file= filename,status= ' REPLACE' ,iostat= istat)
356
+ end if
357
+
342
358
if (istat== 0 ) then
343
359
status_ok = .true.
344
360
else
0 commit comments