@@ -88,7 +88,7 @@ module stdlib_io
88
88
89
89
contains
90
90
91
- subroutine loadtxt_rsp (filename , d , skiprows , max_rows )
91
+ subroutine loadtxt_rsp (filename , d , skiprows , max_rows , fmt )
92
92
! ! version: experimental
93
93
! !
94
94
! ! Loads a 2D array from a text file.
@@ -107,6 +107,8 @@ subroutine loadtxt_rsp(filename, d, skiprows, max_rows)
107
107
! ! A value of zero results in no lines to be read.
108
108
! ! The default value is -1.
109
109
integer , intent (in ), optional :: max_rows
110
+ character (len=* ), intent (in ), optional :: fmt
111
+ character (len= :), allocatable :: fmt_
110
112
! !
111
113
! ! Example
112
114
! ! -------
@@ -147,13 +149,25 @@ subroutine loadtxt_rsp(filename, d, skiprows, max_rows)
147
149
read (s, * )
148
150
end do
149
151
150
- do i = 1 , max_rows_
151
- read (s, " (*" // FMT_REAL_sp(1 :len (FMT_REAL_sp)- 1 )// " ,1x))" ) d(i, :)
152
- end do
152
+ ! Default to format used for savetxt if fmt not specified.
153
+ fmt_ = optval(fmt, " (*" // FMT_REAL_sp(1 :len (FMT_REAL_sp)- 1 )// " ,1x))" )
154
+
155
+ if ( fmt_ == ' *' ) then
156
+ ! Use list directed read if user has specified fmt='*'
157
+ do i = 1 , max_rows_
158
+ read (s,* ) d(i, :)
159
+ enddo
160
+ else
161
+ ! Otherwise pass default or user specified fmt string.
162
+ do i = 1 , max_rows_
163
+ read (s,fmt_) d(i, :)
164
+ enddo
165
+ endif
166
+
153
167
close (s)
154
168
155
169
end subroutine loadtxt_rsp
156
- subroutine loadtxt_rdp (filename , d , skiprows , max_rows )
170
+ subroutine loadtxt_rdp (filename , d , skiprows , max_rows , fmt )
157
171
! ! version: experimental
158
172
! !
159
173
! ! Loads a 2D array from a text file.
@@ -172,6 +186,8 @@ subroutine loadtxt_rdp(filename, d, skiprows, max_rows)
172
186
! ! A value of zero results in no lines to be read.
173
187
! ! The default value is -1.
174
188
integer , intent (in ), optional :: max_rows
189
+ character (len=* ), intent (in ), optional :: fmt
190
+ character (len= :), allocatable :: fmt_
175
191
! !
176
192
! ! Example
177
193
! ! -------
@@ -212,13 +228,25 @@ subroutine loadtxt_rdp(filename, d, skiprows, max_rows)
212
228
read (s, * )
213
229
end do
214
230
215
- do i = 1 , max_rows_
216
- read (s, " (*" // FMT_REAL_dp(1 :len (FMT_REAL_dp)- 1 )// " ,1x))" ) d(i, :)
217
- end do
231
+ ! Default to format used for savetxt if fmt not specified.
232
+ fmt_ = optval(fmt, " (*" // FMT_REAL_dp(1 :len (FMT_REAL_dp)- 1 )// " ,1x))" )
233
+
234
+ if ( fmt_ == ' *' ) then
235
+ ! Use list directed read if user has specified fmt='*'
236
+ do i = 1 , max_rows_
237
+ read (s,* ) d(i, :)
238
+ enddo
239
+ else
240
+ ! Otherwise pass default or user specified fmt string.
241
+ do i = 1 , max_rows_
242
+ read (s,fmt_) d(i, :)
243
+ enddo
244
+ endif
245
+
218
246
close (s)
219
247
220
248
end subroutine loadtxt_rdp
221
- subroutine loadtxt_iint8 (filename , d , skiprows , max_rows )
249
+ subroutine loadtxt_iint8 (filename , d , skiprows , max_rows , fmt )
222
250
! ! version: experimental
223
251
! !
224
252
! ! Loads a 2D array from a text file.
@@ -237,6 +265,8 @@ subroutine loadtxt_iint8(filename, d, skiprows, max_rows)
237
265
! ! A value of zero results in no lines to be read.
238
266
! ! The default value is -1.
239
267
integer , intent (in ), optional :: max_rows
268
+ character (len=* ), intent (in ), optional :: fmt
269
+ character (len= :), allocatable :: fmt_
240
270
! !
241
271
! ! Example
242
272
! ! -------
@@ -277,13 +307,25 @@ subroutine loadtxt_iint8(filename, d, skiprows, max_rows)
277
307
read (s, * )
278
308
end do
279
309
280
- do i = 1 , max_rows_
281
- read (s, * ) d(i, :)
282
- end do
310
+ ! Default to list directed for integer
311
+ fmt_ = optval(fmt, " *" )
312
+ ! Use list directed read if user has specified fmt='*'
313
+ if ( fmt_ == ' *' ) then
314
+ do i = 1 , max_rows_
315
+ read (s,* ) d(i, :)
316
+ enddo
317
+ else
318
+ ! Otherwise pass default user specified fmt string.
319
+ do i = 1 , max_rows_
320
+ read (s,fmt_) d(i, :)
321
+ enddo
322
+ endif
323
+
324
+
283
325
close (s)
284
326
285
327
end subroutine loadtxt_iint8
286
- subroutine loadtxt_iint16 (filename , d , skiprows , max_rows )
328
+ subroutine loadtxt_iint16 (filename , d , skiprows , max_rows , fmt )
287
329
! ! version: experimental
288
330
! !
289
331
! ! Loads a 2D array from a text file.
@@ -302,6 +344,8 @@ subroutine loadtxt_iint16(filename, d, skiprows, max_rows)
302
344
! ! A value of zero results in no lines to be read.
303
345
! ! The default value is -1.
304
346
integer , intent (in ), optional :: max_rows
347
+ character (len=* ), intent (in ), optional :: fmt
348
+ character (len= :), allocatable :: fmt_
305
349
! !
306
350
! ! Example
307
351
! ! -------
@@ -342,13 +386,25 @@ subroutine loadtxt_iint16(filename, d, skiprows, max_rows)
342
386
read (s, * )
343
387
end do
344
388
345
- do i = 1 , max_rows_
346
- read (s, * ) d(i, :)
347
- end do
389
+ ! Default to list directed for integer
390
+ fmt_ = optval(fmt, " *" )
391
+ ! Use list directed read if user has specified fmt='*'
392
+ if ( fmt_ == ' *' ) then
393
+ do i = 1 , max_rows_
394
+ read (s,* ) d(i, :)
395
+ enddo
396
+ else
397
+ ! Otherwise pass default user specified fmt string.
398
+ do i = 1 , max_rows_
399
+ read (s,fmt_) d(i, :)
400
+ enddo
401
+ endif
402
+
403
+
348
404
close (s)
349
405
350
406
end subroutine loadtxt_iint16
351
- subroutine loadtxt_iint32 (filename , d , skiprows , max_rows )
407
+ subroutine loadtxt_iint32 (filename , d , skiprows , max_rows , fmt )
352
408
! ! version: experimental
353
409
! !
354
410
! ! Loads a 2D array from a text file.
@@ -367,6 +423,8 @@ subroutine loadtxt_iint32(filename, d, skiprows, max_rows)
367
423
! ! A value of zero results in no lines to be read.
368
424
! ! The default value is -1.
369
425
integer , intent (in ), optional :: max_rows
426
+ character (len=* ), intent (in ), optional :: fmt
427
+ character (len= :), allocatable :: fmt_
370
428
! !
371
429
! ! Example
372
430
! ! -------
@@ -407,13 +465,25 @@ subroutine loadtxt_iint32(filename, d, skiprows, max_rows)
407
465
read (s, * )
408
466
end do
409
467
410
- do i = 1 , max_rows_
411
- read (s, * ) d(i, :)
412
- end do
468
+ ! Default to list directed for integer
469
+ fmt_ = optval(fmt, " *" )
470
+ ! Use list directed read if user has specified fmt='*'
471
+ if ( fmt_ == ' *' ) then
472
+ do i = 1 , max_rows_
473
+ read (s,* ) d(i, :)
474
+ enddo
475
+ else
476
+ ! Otherwise pass default user specified fmt string.
477
+ do i = 1 , max_rows_
478
+ read (s,fmt_) d(i, :)
479
+ enddo
480
+ endif
481
+
482
+
413
483
close (s)
414
484
415
485
end subroutine loadtxt_iint32
416
- subroutine loadtxt_iint64 (filename , d , skiprows , max_rows )
486
+ subroutine loadtxt_iint64 (filename , d , skiprows , max_rows , fmt )
417
487
! ! version: experimental
418
488
! !
419
489
! ! Loads a 2D array from a text file.
@@ -432,6 +502,8 @@ subroutine loadtxt_iint64(filename, d, skiprows, max_rows)
432
502
! ! A value of zero results in no lines to be read.
433
503
! ! The default value is -1.
434
504
integer , intent (in ), optional :: max_rows
505
+ character (len=* ), intent (in ), optional :: fmt
506
+ character (len= :), allocatable :: fmt_
435
507
! !
436
508
! ! Example
437
509
! ! -------
@@ -472,13 +544,25 @@ subroutine loadtxt_iint64(filename, d, skiprows, max_rows)
472
544
read (s, * )
473
545
end do
474
546
475
- do i = 1 , max_rows_
476
- read (s, * ) d(i, :)
477
- end do
547
+ ! Default to list directed for integer
548
+ fmt_ = optval(fmt, " *" )
549
+ ! Use list directed read if user has specified fmt='*'
550
+ if ( fmt_ == ' *' ) then
551
+ do i = 1 , max_rows_
552
+ read (s,* ) d(i, :)
553
+ enddo
554
+ else
555
+ ! Otherwise pass default user specified fmt string.
556
+ do i = 1 , max_rows_
557
+ read (s,fmt_) d(i, :)
558
+ enddo
559
+ endif
560
+
561
+
478
562
close (s)
479
563
480
564
end subroutine loadtxt_iint64
481
- subroutine loadtxt_csp (filename , d , skiprows , max_rows )
565
+ subroutine loadtxt_csp (filename , d , skiprows , max_rows , fmt )
482
566
! ! version: experimental
483
567
! !
484
568
! ! Loads a 2D array from a text file.
@@ -497,6 +581,8 @@ subroutine loadtxt_csp(filename, d, skiprows, max_rows)
497
581
! ! A value of zero results in no lines to be read.
498
582
! ! The default value is -1.
499
583
integer , intent (in ), optional :: max_rows
584
+ character (len=* ), intent (in ), optional :: fmt
585
+ character (len= :), allocatable :: fmt_
500
586
! !
501
587
! ! Example
502
588
! ! -------
@@ -538,13 +624,24 @@ subroutine loadtxt_csp(filename, d, skiprows, max_rows)
538
624
read (s, * )
539
625
end do
540
626
541
- do i = 1 , max_rows_
542
- read (s, " (*" // FMT_COMPLEX_sp(1 :len (FMT_COMPLEX_sp)- 1 )// " ,1x))" ) d(i, :)
543
- end do
627
+ ! Default to format used for savetxt if fmt not specified.
628
+ fmt_ = optval(fmt, " (*" // FMT_COMPLEX_sp(1 :len (FMT_COMPLEX_sp)- 1 )// " ,1x))" )
629
+ if ( fmt_ == ' *' ) then
630
+ ! Use list directed read if user has specified fmt='*'
631
+ do i = 1 , max_rows_
632
+ read (s,* ) d(i, :)
633
+ enddo
634
+ else
635
+ ! Otherwise pass default or user specified fmt string.
636
+ do i = 1 , max_rows_
637
+ read (s,fmt_) d(i, :)
638
+ enddo
639
+ endif
640
+
544
641
close (s)
545
642
546
643
end subroutine loadtxt_csp
547
- subroutine loadtxt_cdp (filename , d , skiprows , max_rows )
644
+ subroutine loadtxt_cdp (filename , d , skiprows , max_rows , fmt )
548
645
! ! version: experimental
549
646
! !
550
647
! ! Loads a 2D array from a text file.
@@ -563,6 +660,8 @@ subroutine loadtxt_cdp(filename, d, skiprows, max_rows)
563
660
! ! A value of zero results in no lines to be read.
564
661
! ! The default value is -1.
565
662
integer , intent (in ), optional :: max_rows
663
+ character (len=* ), intent (in ), optional :: fmt
664
+ character (len= :), allocatable :: fmt_
566
665
! !
567
666
! ! Example
568
667
! ! -------
@@ -604,9 +703,20 @@ subroutine loadtxt_cdp(filename, d, skiprows, max_rows)
604
703
read (s, * )
605
704
end do
606
705
607
- do i = 1 , max_rows_
608
- read (s, " (*" // FMT_COMPLEX_dp(1 :len (FMT_COMPLEX_dp)- 1 )// " ,1x))" ) d(i, :)
609
- end do
706
+ ! Default to format used for savetxt if fmt not specified.
707
+ fmt_ = optval(fmt, " (*" // FMT_COMPLEX_dp(1 :len (FMT_COMPLEX_dp)- 1 )// " ,1x))" )
708
+ if ( fmt_ == ' *' ) then
709
+ ! Use list directed read if user has specified fmt='*'
710
+ do i = 1 , max_rows_
711
+ read (s,* ) d(i, :)
712
+ enddo
713
+ else
714
+ ! Otherwise pass default or user specified fmt string.
715
+ do i = 1 , max_rows_
716
+ read (s,fmt_) d(i, :)
717
+ enddo
718
+ endif
719
+
610
720
close (s)
611
721
612
722
end subroutine loadtxt_cdp
0 commit comments