1439 SUBROUTINE get_ (string, maxlen, iostat)
1442 INTEGER,
INTENT(in),
optional :: maxlen
1443 INTEGER,
INTENT(out),
optional :: iostat
1445 INTEGER :: n_chars_remain
1446 INTEGER :: n_chars_read
1447 character(LEN=GET_BUFFER_LEN) :: buffer
1448 INTEGER :: local_iostat
1454 if(
PRESENT(maxlen))
then
1455 n_chars_remain = maxlen
1457 n_chars_remain = huge(1)
1462 if(n_chars_remain <= 0)
return
1464 n_chars_read = min(n_chars_remain, get_buffer_len)
1466 if(
PRESENT(iostat))
then
1467 read(unit= , fmt=
"(A)", advance=
"NO", &
1468 iostat=iostat, size=n_chars_read) buffer(:n_chars_read)
1469 if(iostat < 0)
exit read_loop
1470 if(iostat > 0)
return
1472 read(unit= , fmt=
"(A)", advance=
"NO", &
1473 iostat=local_iostat, size=n_chars_read) buffer(:n_chars_read)
1474 if(local_iostat < 0)
exit read_loop
1477 string = string//buffer(:n_chars_read)
1478 n_chars_remain = n_chars_remain - n_chars_read
1482 string = string//buffer(:n_chars_read)
1492 SUBROUTINE get_unit (unit, string, maxlen, iostat)
1494 INTEGER,
INTENT(in) :: unit
1496 INTEGER,
INTENT(in),
optional :: maxlen
1497 INTEGER,
INTENT(out),
optional :: iostat
1499 INTEGER :: n_chars_remain
1500 INTEGER :: n_chars_read
1501 character(LEN=GET_BUFFER_LEN) :: buffer
1502 INTEGER :: local_iostat
1508 if(
PRESENT(maxlen))
then
1509 n_chars_remain = maxlen
1511 n_chars_remain = huge(1)
1516 if(n_chars_remain <= 0)
return
1518 n_chars_read = min(n_chars_remain, get_buffer_len)
1520 if(
PRESENT(iostat))
then
1521 read(unit=unit, fmt=
"(A)", advance=
"NO", &
1522 iostat=iostat, size=n_chars_read) buffer(:n_chars_read)
1523 if(iostat < 0)
exit read_loop
1524 if(iostat > 0)
return
1526 read(unit=unit, fmt=
"(A)", advance=
"NO", &
1527 iostat=local_iostat, size=n_chars_read) buffer(:n_chars_read)
1528 if(local_iostat < 0)
exit read_loop
1531 string = string//buffer(:n_chars_read)
1532 n_chars_remain = n_chars_remain - n_chars_read
1536 string = string//buffer(:n_chars_read)
1567 SUBROUTINE get_set_ch (string, set, separator, maxlen, iostat)
1570 character(LEN= ),
INTENT(in) :: set
1572 INTEGER,
INTENT(in),
optional :: maxlen
1573 INTEGER,
INTENT(out),
optional :: iostat
1575 INTEGER :: n_chars_remain
1576 character(LEN=1) :: buffer
1578 INTEGER :: local_iostat
1585 if(
PRESENT(maxlen))
then
1586 n_chars_remain = maxlen
1588 n_chars_remain = huge(1)
1591 if(
PRESENT(separator)) separator =
""
1595 if(n_chars_remain <= 0)
return
1597 if(
PRESENT(iostat))
then
1598 read(unit= , fmt=
"(A1)", advance=
"NO", iostat=iostat) buffer
1599 if(iostat /= 0)
exit read_loop
1601 read(unit= , fmt=
"(A1)", advance=
"NO", iostat=local_iostat) buffer
1602 if(local_iostat /= 0)
exit read_loop
1605 i_set =
scan(buffer, set)
1608 if(
PRESENT(separator)) separator = buffer
1612 string = string//buffer
1613 n_chars_remain = n_chars_remain - 1
1625 SUBROUTINE get_unit_set_vs (unit, string, set, separator, maxlen, iostat)
1627 INTEGER,
INTENT(in) :: unit
1631 INTEGER,
INTENT(in),
optional :: maxlen
1632 INTEGER,
INTENT(out),
optional :: iostat
1637 call get(unit, string,
char(set), separator, maxlen, iostat)
1647 SUBROUTINE get_unit_set_ch (unit, string, set, separator, maxlen, iostat)
1649 INTEGER,
INTENT(in) :: unit
1651 character(LEN= ),
INTENT(in) :: set
1653 INTEGER,
INTENT(in),
optional :: maxlen
1654 INTEGER,
INTENT(out),
optional :: iostat
1656 INTEGER :: n_chars_remain
1657 character(LEN=1) :: buffer
1659 INTEGER :: local_iostat
1666 if(
PRESENT(maxlen))
then
1667 n_chars_remain = maxlen
1669 n_chars_remain = huge(1)
1672 if(
PRESENT(separator)) separator =
""
1676 if(n_chars_remain <= 0)
return
1678 if(
PRESENT(iostat))
then
1679 read(unit=unit, fmt=
"(A1)", advance=
"NO", iostat=iostat) buffer
1680 if(iostat /= 0)
exit read_loop
1682 read(unit=unit, fmt=
"(A1)", advance=
"NO", iostat=local_iostat) buffer
1683 if(local_iostat /= 0)
exit read_loop
1686 i_set =
scan(buffer, set)
1689 if(
PRESENT(separator)) separator = buffer
1693 string = string//buffer
1694 n_chars_remain = n_chars_remain - 1
2097 elemental function replace_vs_ch_auto (string, start, substring)
result (rep_string)
2100 INTEGER,
INTENT(in) :: start
2101 character(LEN= ),
INTENT(in) :: substring
2107 rep_string =
replace(
char(string), start, max(start, 1)+
len(substring)-1, substring)
2117 elemental function replace_ch_ch_auto (string, start, substring)
result (rep_string)
2119 character(LEN= ),
INTENT(in) :: string
2120 INTEGER,
INTENT(in) :: start
2121 character(LEN= ),
INTENT(in) :: substring
2127 rep_string =
replace(string, start, max(start, 1)+
len(substring)-1, substring)
2202 elemental function replace_ch_ch_fixed (string, start, finish, substring)
result (rep_string)
2204 character(LEN= ),
INTENT(in) :: string
2205 INTEGER,
INTENT(in) :: start
2206 INTEGER,
INTENT(in) :: finish
2207 character(LEN= ),
INTENT(in) :: substring
2216 start_ = max(1, start)
2217 finish_ = min(
len(string), finish)
2219 if(finish_ < start_)
then
2220 rep_string =
insert(string, start_, substring)
2222 rep_string =
var_str(string(:start_-1)//substring//string(finish_+1:))
2348 elemental function replace_ch_vs_ch_target (string, target, substring, every, back)
result (rep_string)
2350 character(LEN= ),
INTENT(in) :: string
2352 character(LEN= ),
INTENT(in) :: substring
2353 LOGICAL,
INTENT(in),
optional :: every
2354 LOGICAL,
INTENT(in),
optional :: back
2361 rep_string =
replace(string,
char(
target), substring, every, back)
2371 elemental function replace_vs_ch_ch_target (string, target, substring, every, back)
result (rep_string)
2374 character(LEN= ),
INTENT(in) :: target
2375 character(LEN= ),
INTENT(in) :: substring
2376 LOGICAL,
INTENT(in),
optional :: every
2377 LOGICAL,
INTENT(in),
optional :: back
2384 rep_string =
replace(
char(string),
target, substring, every, back)
2394 elemental function replace_ch_ch_ch_target (string, target, substring, every, back)
result (rep_string)
2396 character(LEN= ),
INTENT(in) :: string
2397 character(LEN= ),
INTENT(in) :: target
2398 character(LEN= ),
INTENT(in) :: substring
2399 LOGICAL,
INTENT(in),
optional :: every
2400 LOGICAL,
INTENT(in),
optional :: back
2406 INTEGER :: length_target
2415 if(
len(
target) == 0)
then
2416 if(
len(string) /= 0)
then
2419 rep_string = substring
2428 if(
PRESENT(every))
then
2434 if(
PRESENT(back))
then
2442 work_string = string
2444 length_target =
len(
target)
2448 i_target =
index(work_string,
target, back_)
2450 if(i_target == 0)
exit replace_loop
2453 rep_string = substring//
extract(work_string, start=i_target+length_target)//rep_string
2454 work_string =
extract(work_string, finish=i_target-1)
2456 rep_string = rep_string//
extract(work_string, finish=i_target-1)//substring
2457 work_string =
extract(work_string, start=i_target+length_target)
2460 if(.NOT. every_)
exit replace_loop
2465 rep_string = work_string//rep_string
2467 rep_string = rep_string//work_string
2498 elemental SUBROUTINE split_ch (string, word, set, separator, back)
2502 character(LEN= ),
INTENT(in) :: set
2504 LOGICAL,
INTENT(in),
optional :: back
2507 INTEGER :: i_separator
2511 if(
PRESENT(back))
then
2517 i_separator =
scan(string, set, back_)
2519 if(i_separator /= 0)
then
2522 word =
extract(string, start=i_separator+1)
2523 if(
PRESENT(separator)) separator =
extract(string, start=i_separator, finish=i_separator)
2524 string =
extract(string, finish=i_separator-1)
2526 word =
extract(string, finish=i_separator-1)
2527 if(
PRESENT(separator)) separator =
extract(string, start=i_separator, finish=i_separator)
2528 string =
extract(string, start=i_separator+1)
2534 if(
PRESENT(separator)) separator =
""