Class | dc_string |
In: |
src/dc_string.f90
|
result : | character(STRLEN) |
string : | character(*), intent(in) |
function GTStringQuoteForDcl(string) result(result) character(*), intent(in):: string character(STRLEN):: result end function
result : | character(string) |
carray(:) : | character(*) , intent(in) |
expr : | character(*) , intent(in), optional |
character(string) function JoinChar(carray, expr) result(result) character(*) , intent(in) :: carray(:) character(*) , intent(in), optional :: expr character(2) ,parameter :: default = ', ' character(string) :: delimiter integer :: dellen, i continue if ( present(expr) ) then delimiter = expr dellen = len(expr) else delimiter = default dellen = len(default) endif if (size(carray) <= 0) then result = "" return endif result = trim(carray(1)) do, i = 2, size(carray) result = trim(result) // delimiter(1:dellen) // trim(carray(i)) enddo end function
result : | character(string) |
ch : | character(len = *), intent(in) |
character(string) function LChar(ch) result(result) character(len = *), intent(in):: ch continue result = ch call toLower(result) end function LChar
str : | character(*), intent(in) |
carray(:) : | character(*), pointer |
sep : | character(*), intent(in) |
limit : | integer(INTK), intent(in), optional |
subroutine Split_CC(str, carray, sep, limit) implicit none character(*), intent(in):: str character(*), pointer:: carray(:) character(*), intent(in):: sep integer(INTK), intent(in), optional:: limit integer(INTK) :: num, cur, i, limitnum character(STRING) :: substr logical :: end continue if (present(limit)) then if (limit > 0) then limitnum = limit else limitnum = 0 end if else limitnum = 0 end if if (len(trim(sep)) == 0) then num = 1 substr = str ! 重複して無駄だが carray を allocate するため, 何分割するか ! 調べ, num に格納する. do cur = index(trim(substr), ' ') if (cur == 0) exit num = num + 1 substr = adjustl(substr(cur + len(sep) :len(substr))) end do if (limitnum /= 0 .and. num > limitnum) num = limitnum allocate(carray(num)) substr = str end = .false. do i = 1, num cur = index(trim(substr), ' ') if (cur == 0 .or. i == num) end = .true. if (end) then carray(i) = substr exit else carray(i) = substr(1:cur - 1) end if substr = adjustl(substr(cur + len(sep) :len(substr))) end do else num = 1 substr = str ! 重複して無駄だが carray を allocate するため, 何分割するか ! 調べ, num に格納する. do cur = index(substr, trim(sep)) if (cur == 0) exit num = num + 1 substr = substr(cur + len(sep) :len(substr)) end do if (limitnum /= 0 .and. num > limitnum) num = limitnum allocate(carray(num)) substr = str end = .false. do i = 1, num cur = index(substr, trim(sep)) if (cur == 0 .or. i == num) end = .true. if (end) then carray(i) = substr exit else carray(i) = substr(1:cur - 1) end if substr = substr(cur + len(sep) :len(substr)) end do end if return end subroutine Split_CC
result : | logical |
whole : | character(len = *), intent(in) |
head : | character(len = *), intent(in) |
$ logical function StrHead_SC(whole, head) result(result)
$ type(VSTRING) , intent(in) : | whole |
$ character(len = *), intent(in) : | head |
$ continue $ result = (extract(whole, 1, len(head)) == head) $ end function
logical function StrHead_CC(whole, head) result(result) character(len = *), intent(in):: whole character(len = *), intent(in):: head continue result = (len(whole) >= len(head)) if (.not. result) return result = (whole(1:len(head)) == head) end function
result : | character(string) |
ch : | character(len = *), intent(in) |
character(string) function UChar(ch) result(result) character(len = *), intent(in):: ch continue result = ch call toUpper(result) end function UChar
External Alias for src/dcstringcprintf.f90#DCStringCPrintf
dble_ptr(:) : | double precision, pointer |
string : | type(VSTRING), intent(in) |
subroutine strv2dp(dble_ptr, string) double precision, pointer:: dble_ptr(:) type(VSTRING), intent(in):: string type(STRING_LIST):: vslist integer:: i, nvalues continue call Split(vslist, string, ", ") nvalues = len(vslist) allocate(dble_ptr(nvalues)) do, i = 1, nvalues dble_ptr(i) = stod(shift(vslist)) enddo call dispose(vslist) end subroutine
int_ptr(:) : | integer, pointer |
string : | character(len = *), intent(in) |
subroutine str2ip(int_ptr, string) integer, pointer:: int_ptr(:) character(len = *), intent(in):: string integer:: i, j, idx, nvalues continue nvalues = 1 i = 1 do idx = index(string(i: ), ',') if (idx == 0) exit i = i + idx - 1 + 1 nvalues = nvalues + 1 enddo allocate(int_ptr(nvalues)) i = 1 j = 1 do idx = index(string(i: ), ',') if (idx == 0) then int_ptr(j) = stoi(string(i: )) exit endif int_ptr(j) = stod(string(i: i+idx-2)) i = i + idx - 1 + 1 j = j + 1 enddo end subroutine
int_ptr(:) : | integer, pointer |
string : | type(VSTRING), intent(in) |
subroutine strv2ip(int_ptr, string) integer, pointer:: int_ptr(:) type(VSTRING), intent(in):: string type(STRING_LIST):: vslist integer:: nvalues, i continue call Split(vslist, string, ", ") nvalues = len(vslist) allocate(int_ptr(nvalues)) do, i = 1, nvalues int_ptr(i) = stoi(shift(vslist)) enddo call dispose(vslist) end subroutine
real_ptr(:) : | double precision, pointer |
string : | character(len = *), intent(in) |
subroutine str2dp(real_ptr, string) double precision, pointer:: real_ptr(:) character(len = *), intent(in):: string integer:: i, j, idx, nvalues continue nvalues = 1 i = 1 do idx = index(string(i: ), ',') if (idx == 0) exit i = i + idx - 1 + 1 nvalues = nvalues + 1 enddo allocate(real_ptr(nvalues)) i = 1 j = 1 do idx = index(string(i: ), ',') if (idx == 0) then real_ptr(j) = stod(string(i: )) exit endif real_ptr(j) = stod(string(i: i+idx-2)) i = i + idx - 1 + 1 j = j + 1 enddo end subroutine
real_ptr(:) : | real, pointer |
string : | type(VSTRING), intent(in) |
subroutine strv2rp(real_ptr, string) real, pointer:: real_ptr(:) type(VSTRING), intent(in):: string type(STRING_LIST):: vslist integer:: i, nvalues continue call Split(vslist, string, ", ") nvalues = len(vslist) allocate(real_ptr(nvalues)) do, i = 1, nvalues real_ptr(i) = stod(shift(vslist)) enddo call dispose(vslist) end subroutine
real_ptr(:) : | real, pointer |
string : | character(len = *), intent(in) |
subroutine str2rp(real_ptr, string) real, pointer:: real_ptr(:) character(len = *), intent(in):: string integer:: i, j, idx, nvalues continue nvalues = 1 i = 1 do idx = index(string(i: ), ',') if (idx == 0) exit i = i + idx - 1 + 1 nvalues = nvalues + 1 enddo allocate(real_ptr(nvalues)) i = 1 j = 1 do idx = index(string(i: ), ',') if (idx == 0) then real_ptr(j) = stod(string(i: )) exit endif real_ptr(j) = stod(string(i: i+idx-2)) i = i + idx - 1 + 1 j = j + 1 enddo end subroutine
result : | integer |
string : | character(len = *), intent(in) |
start : | integer, intent(in) |
substr : | character(len = *), intent(in) |
integer function index_ofs(string, start, substr) result(result) character(len = *), intent(in):: string integer, intent(in):: start character(len = *), intent(in):: substr intrinsic index if (start < 1) then result = 0 return endif result = index(string(start: ), substr) if (result == 0) return result = start + result - 1 end function
External Alias for src/dcstringprintf.f90#DCStringPrintf
External Alias for src/dcstringfprintf.f90#DCStringFPrintf
External Alias for src/dcstringsprintf.f90#DCStringSPrintf
result : | character(len = strlen) |
string : | character(len = *), intent(in) |
from : | character(len = *), intent(in) |
to : | character(len = *), intent(in) |
function replace(string, from, to) result(result) implicit none character(len = strlen):: result character(len = *), intent(in):: string, from, to integer:: i, isa, isb, iea, ieb continue result = string i = index(result, from) if (i == 0) return isa = i + len(from) isb = i + len(to) if (len(to) < len(from)) then iea = len(result) ieb = len(result) + len(to) - len(from) else iea = len(result) + len(from) - len(to) ieb = len(result) endif if (len(to) /= len(from)) result(isb:ieb) = result(isa:iea) result(i:i+len(to)-1) = to end function
result : | double precision
| ||
string : | character(len = *), intent(in) |
double precision function atod_scalar(string) result(result) character(len = *), intent(in):: string integer:: ios character(len = 80):: buffer integer:: ipoint, iexp intrinsic scan continue buffer = string ! もし整定数をいれてしまった場合は小数点を附加 if (index(buffer, '.') == 0) then iexp = scan(buffer, "eEdD") if (iexp /= 0) then buffer(iexp+1: len(buffer)) = buffer(iexp: len(buffer)-1) ipoint = iexp else ipoint = len_trim(buffer) + 1 endif buffer(ipoint: ipoint) = '.' endif read(unit=buffer, fmt="(g80.10)", iostat=ios) result if (ios /= 0) result = 0.0 end function
result : | double precision |
string : | type(VSTRING), intent(in) |
double precision function stod_scalar(string) result(result) type(VSTRING), intent(in):: string character(len = 80):: buffer continue buffer = string result = atod_scalar(buffer) end function
result : | integer |
string : | type(VSTRING), intent(in) |
integer function stoi_scalar(string) result(result) type(VSTRING), intent(in):: string integer:: ios character(len = 80):: buffer continue buffer = string read(unit=buffer, fmt="(i80)", iostat=ios) result if (ios /= 0) result = 0 end function
result : | integer |
string : | character(len = *), intent(in) |
default : | integer, intent(in), optional |
integer function atoi_scalar(string, default) result(result) character(len = *), intent(in):: string integer, intent(in), optional:: default integer:: ios continue read(unit=string, fmt="(i80)", iostat=ios) result if (ios /= 0) then if (present(default)) then result = default else result = 0 endif endif end function
result : | logical |
string : | character(len = *), intent(in) |
logical function str2bool(string) result(result) character(len = *), intent(in):: string continue select case(string) case ("", "0", "0.0", "0.0D0", "0.0d0", ".false.", ".FALSE.", "f", "F", "false", "FALSE") result = .false. case default result = .true. end select end function
result : | logical
| ||||||
string_a : | character(len = *), intent(in) | ||||||
string_b : | character(len = *), intent(in) | ||||||
コンパイラによっては character(len = len(string_a)): | abuf |
が通らないため, 文字数を string = 500 で制限
logical function strieq_cc(string_a, string_b) result(result) character(len = *), intent(in):: string_a character(len = *), intent(in):: string_b character(len = string):: abuf character(len = string):: bbuf !!$ character(len = len(string_a)):: abuf !!$ character(len = len(string_b)):: bbuf abuf = string_a bbuf = string_b call toUpper(abuf) call toUpper(bbuf) result = (abuf == bbuf) end function
result : | logical |
string_a : | type(VSTRING), intent(in) |
string_b : | character(len = *), intent(in) |
コンパイラによっては character(len = len(string_a)): | abuf |
が通らないため, 文字数を string = 500 で制限
logical function strieq_sc(string_a, string_b) result(result) type(VSTRING), intent(in):: string_a character(len = *), intent(in):: string_b result = strieq_cc(string_a%body(1:string_a%len), string_b) end function
result(4) : | character(STRING) |
c1 : | character(*), intent(in) |
c2 : | character(*), intent(in) |
c3 : | character(*), intent(in) |
c4 : | character(*), intent(in) |
異なる長さの複数の文字列を1つの文字配列にするための 関数. 文字の長さは dc_types モジュールの STRING に なる.
function toArray4(c1, c2, c3, c4) result(result) character(*), intent(in) :: c1, c2, c3, c4 character(STRING) :: result(4) continue result(1) = c1 result(2) = c2 result(3) = c3 result(4) = c4 end function
result(5) : | character(STRING) |
c1 : | character(*), intent(in) |
c2 : | character(*), intent(in) |
c3 : | character(*), intent(in) |
c4 : | character(*), intent(in) |
c5 : | character(*), intent(in) |
異なる長さの複数の文字列を1つの文字配列にするための 関数. 文字の長さは dc_types モジュールの STRING に なる.
function toArray5(c1, c2, c3, c4, c5) result(result) character(*), intent(in) :: c1, c2, c3, c4, c5 character(STRING) :: result(5) continue result(1) = c1 result(2) = c2 result(3) = c3 result(4) = c4 result(5) = c5 end function
result(6) : | character(STRING) |
c1 : | character(*), intent(in) |
c2 : | character(*), intent(in) |
c3 : | character(*), intent(in) |
c4 : | character(*), intent(in) |
c5 : | character(*), intent(in) |
c6 : | character(*), intent(in) |
異なる長さの複数の文字列を1つの文字配列にするための 関数. 文字の長さは dc_types モジュールの STRING に なる.
function toArray6(c1, c2, c3, c4, c5, c6) result(result) character(*), intent(in) :: c1, c2, c3, c4, c5, c6 character(STRING) :: result(6) continue result(1) = c1 result(2) = c2 result(3) = c3 result(4) = c4 result(5) = c5 result(6) = c6 end function
result(7) : | character(STRING) |
c1 : | character(*), intent(in) |
c2 : | character(*), intent(in) |
c3 : | character(*), intent(in) |
c4 : | character(*), intent(in) |
c5 : | character(*), intent(in) |
c6 : | character(*), intent(in) |
c7 : | character(*), intent(in) |
異なる長さの複数の文字列を1つの文字配列にするための 関数. 文字の長さは dc_types モジュールの STRING に なる.
function toArray7(c1, c2, c3, c4, c5, c6, c7) result(result) character(*), intent(in) :: c1, c2, c3, c4, c5, c6, c7 character(STRING) :: result(7) continue result(1) = c1 result(2) = c2 result(3) = c3 result(4) = c4 result(5) = c5 result(6) = c6 result(7) = c7 end function
result(8) : | character(STRING) |
c1 : | character(*), intent(in) |
c2 : | character(*), intent(in) |
c3 : | character(*), intent(in) |
c4 : | character(*), intent(in) |
c5 : | character(*), intent(in) |
c6 : | character(*), intent(in) |
c7 : | character(*), intent(in) |
c8 : | character(*), intent(in) |
異なる長さの複数の文字列を1つの文字配列にするための 関数. 文字の長さは dc_types モジュールの STRING に なる.
function toArray8(c1, c2, c3, c4, c5, c6, c7, c8) result(result) character(*), intent(in) :: c1, c2, c3, c4, c5, c6, c7, c8 character(STRING) :: result(8) continue result(1) = c1 result(2) = c2 result(3) = c3 result(4) = c4 result(5) = c5 result(6) = c6 result(7) = c7 result(8) = c8 end function
result(3) : | character(STRING) |
c1 : | character(*), intent(in) |
c2 : | character(*), intent(in) |
c3 : | character(*), intent(in) |
異なる長さの複数の文字列を1つの文字配列にするための 関数. 文字の長さは dc_types モジュールの STRING に なる.
function toArray3(c1, c2, c3) result(result) character(*), intent(in) :: c1, c2, c3 character(STRING) :: result(3) continue result(1) = c1 result(2) = c2 result(3) = c3 end function
result(2) : | character(STRING) |
c1 : | character(*), intent(in) |
c2 : | character(*), intent(in) |
異なる長さの複数の文字列を1つの文字配列にするための 関数. 文字の長さは dc_types モジュールの STRING に なる.
function toArray2(c1, c2) result(result) character(*), intent(in) :: c1, c2 character(STRING) :: result(2) continue result(1) = c1 result(2) = c2 end function
result(9) : | character(STRING) |
c1 : | character(*), intent(in) |
c2 : | character(*), intent(in) |
c3 : | character(*), intent(in) |
c4 : | character(*), intent(in) |
c5 : | character(*), intent(in) |
c6 : | character(*), intent(in) |
c7 : | character(*), intent(in) |
c8 : | character(*), intent(in) |
c9 : | character(*), intent(in) |
異なる長さの複数の文字列を1つの文字配列にするための 関数. 文字の長さは dc_types モジュールの STRING に なる.
function toArray9(c1, c2, c3, c4, c5, c6, c7, c8, c9) result(result) character(*), intent(in) :: c1, c2, c3, c4, c5, c6, c7, c8, c9 character(STRING) :: result(9) continue result(1) = c1 result(2) = c2 result(3) = c3 result(4) = c4 result(5) = c5 result(6) = c6 result(7) = c7 result(8) = c8 result(9) = c9 end function
result : | character(token) |
x : | real, intent(in) |
character(token) function rtoa_scalar(x) result(result) real, intent(in):: x character(len = 16):: buffer continue write(unit=buffer, fmt="(g16.8)") x result = adjustl(buffer) end function
result : | character(token) |
l : | logical, intent(in) |
character(token) function ltoa_scalar(l) result(result) logical, intent(in):: l continue if (l) then result = ".true." else result = ".false." end if end function
result : | character(token) |
i : | integer, intent(in) |
character(token) function itoa_scalar(i) result(result) integer, intent(in):: i character(len = 32):: buffer continue write(unit=buffer, fmt="(i20)") i result = adjustl(buffer) end function
result : | character(string) |
rbuf(:) : | real, intent(in) |
character(string) function rtoa_array(rbuf) result(result) real, intent(in):: rbuf(:) integer:: i continue if (size(rbuf) <= 0) then result = "" return endif result = toChar(rbuf(1)) do, i = 2, size(rbuf) result = trim(result) // ", " // trim(toChar(rbuf(i))) enddo end function
result : | character(STRING) |
lbuf(:) : | logical, intent(in) |
character(STRING) function ltoa_array(lbuf) result(result) logical, intent(in):: lbuf(:) integer:: i continue if (size(lbuf) <= 0) then result = "" return endif result = toChar(lbuf(1)) do, i = 2, size(lbuf) result = trim(result) // ", " // trim(toChar(lbuf(i))) enddo end function
result : | character(token) |
d : | double precision, intent(in) |
character(token) function dtoa_scalar(d) result(result) double precision, intent(in):: d character(len = 32):: buffer continue write(unit=buffer, fmt="(g32.24)") d result = adjustl(buffer) end function
result : | character(STRING) |
dbuf(:) : | double precision, intent(in) |
character(STRING) function dtoa_array(dbuf) result(result) double precision, intent(in):: dbuf(:) integer:: i continue if (size(dbuf) <= 0) then result = "" return endif result = toChar(dbuf(1)) do, i = 2, size(dbuf) result = trim(result) // ", " // trim(toChar(dbuf(i))) enddo end function
result : | character(string) |
ibuf(:) : | integer, intent(in) |
character(string) function itoa_array(ibuf) result(result) integer, intent(in):: ibuf(:) integer:: i continue if (size(ibuf) <= 0) then result = "" return endif result = toChar(ibuf(1)) do, i = 2, size(ibuf) result = trim(result) // ", " // trim(toChar(ibuf(i))) enddo end function
ch : | character(len = *), intent(inout) |
subroutine clower(ch) character(len = *), intent(inout):: ch integer:: i, lch, idx continue lch = len(ch) do, i = 1, lch idx = ichar(ch(i:i)) if (65 <= idx .and. idx <= 90) then ch(i:i)=char(idx + 32) end if end do end subroutine