Skip to content

stringifor_string_t

StringiFor, definition of string type.

Source: src/lib/stringifor_string_t.F90

Dependencies

Contents

Variables

NameTypeAttributesDescription
CKintegerparameterDefault character kind.
UPPER_ALPHABETcharacter(kind=CK, len=26)parameterUpper case alphabet.
LOWER_ALPHABETcharacter(kind=CK, len=26)parameterLower case alphabet.
SPACEcharacter(kind=CK, len=1)parameterSpace character.
TABcharacter(kind=CK, len=1)parameterTab character.
UIX_DIR_SEPcharacter(kind=CK, len=1)parameterUnix/Linux directories separator (/).
BACKSLASHcharacter(kind=CK, len=1)parameterBackslash character.

Derived Types

string

OOP designed string class.

Components

NameTypeAttributesDescription
rawcharacter(kind=CK, len=:)allocatableRaw data.

Type-Bound Procedures

NameAttributesDescription
adjustlpass(self)Adjustl replacement.
adjustrpass(self)Adjustr replacement.
countpass(self)Count replacement.
indexIndex replacement.
lenpass(self)Len replacement.
len_trimpass(self)Len_trim replacement.
repeatRepeat replacement.
scanScan replacement.
trimpass(self)Trim replacement.
verifyVerify replacement.
basedirpass(self)Return the base directory name of a string containing a file name.
basenamepass(self)Return the base file name of a string containing a file name.
camelcasepass(self)Return a string with all words capitalized without spaces.
capitalizepass(self)Return a string with its first character capitalized and the rest lowercased.
charspass(self)Return the raw characters data.
colorizeColorize and stylize strings.
decodepass(self)Decode string.
encodepass(self)Encode string.
escapepass(self)Escape backslashes (or custom escape character).
extensionpass(self)Return the extension of a string containing a file name.
fillpass(self)Pad string on the left (or right) with zeros (or other char) to fill width.
freepass(self)Free dynamic memory.
globGlob search, finds all the pathnames matching a given pattern.
insertInsert substring into string at a specified position.
joinReturn a string that is a join of an array of strings or characters.
strjoinReturn a string that is a join of an array of strings or characters;
lowerpass(self)Return a string with all lowercase characters.
partitionpass(self)Split string at separator and return the 3 parts (before, the separator and after).
read_filepass(self)Read a file a single string stream.
read_linepass(self)Read line (record) from a connected unit.
read_linespass(self)Read (all) lines (records) from a connected unit as a single ascii stream.
replacepass(self)Return a string with all occurrences of substring old replaced by new.
reversepass(self)Return a reversed string.
searchpass(self)Search for tagged record into string.
slicepass(self)Return the raw characters data sliced.
snakecasepass(self)Return a string with all words lowercase separated by "_".
splitpass(self)Return a list of substring in the string, using sep as the delimiter string.
split_chunkedpass(self)Return a list of substring in the string, using sep as the delimiter string.
startcasepass(self)Return a string with all words capitalized, e.g. title case.
strippass(self)Return a string with the leading and trailing characters removed.
swapcasepass(self)Return a string with uppercase chars converted to lowercase and vice versa.
tempnamepass(self)Return a safe temporary name suitable for temporary file or directories.
to_numberCast string to number.
unescapepass(self)Unescape double backslashes (or custom escaped character).
uniquepass(self)Reduce to one (unique) multiple occurrences of a substring into a string.
upperpass(self)Return a string with all uppercase characters.
write_filepass(self)Write a single string stream into file.
write_linepass(self)Write line (record) to a connected unit.
write_linespass(self)Write lines (records) to a connected unit.
end_withpass(self)Return true if a string ends with a specified suffix.
is_allocatedpass(self)Return true if the string is allocated.
is_digitpass(self)Return true if all characters in the string are digits.
is_integerpass(self)Return true if the string contains an integer.
is_lowerpass(self)Return true if all characters in the string are lowercase.
is_numberpass(self)Return true if the string contains a number (real or integer).
is_realpass(self)Return true if the string contains an real.
is_upperpass(self)Return true if all characters in the string are uppercase.
start_withpass(self)Return true if a string starts with a specified prefix.
assignment(=)Assignment operator overloading.
operator(//)Concatenation operator overloading.
operator(.cat.)Concatenation operator (string output) overloading.
operator(==)Equal operator overloading.
operator(/=)Not equal operator overloading.
operator(<)Lower than operator overloading.
operator(<=)Lower equal than operator overloading.
operator(>=)Greater equal than operator overloading.
operator(>)Greater than operator overloading.
read(formatted)Formatted input.
write(formatted)Formatted output.
read(unformatted)Unformatted input.
write(unformatted)Unformatted output.
sindex_string_stringpass(self)Index replacement.
sindex_string_characterpass(self)Index replacement.
srepeat_string_stringpass(self)Repeat replacement.
srepeat_character_stringnopassRepeat replacement.
sscan_string_stringpass(self)Scan replacement.
sscan_string_characterpass(self)Scan replacement.
sverify_string_stringpass(self)Verify replacement.
sverify_string_characterpass(self)Verify replacement.
colorize_strpass(self)Colorize and stylize strings.
glob_characterpass(self)Glob search (character output).
glob_stringpass(self)Glob search (string output).
insert_stringpass(self)Insert substring into string at a specified position.
insert_characterpass(self)Insert substring into string at a specified position.
join_stringspass(self)Return join string of an array of strings.
join_characterspass(self)Return join string of an array of characters.
strjoin_stringsnopassReturn join string of an array of strings.
strjoin_charactersnopassReturn join string of an array of strings.
strjoin_strings_arraynopassReturn join 1D string array of an 2D array of strings in columns or rows.
strjoin_characters_arraynopassReturn join 1D string array of an 2D array of characters in columns or rows.
to_integer_I1Ppass(self)Cast string to integer.
to_integer_I2Ppass(self)Cast string to integer.
to_integer_I4Ppass(self)Cast string to integer.
to_integer_I8Ppass(self)Cast string to integer.
to_real_R4Ppass(self)Cast string to real.
to_real_R8Ppass(self)Cast string to real.
to_real_R16Ppass(self)Cast string to real.
string_assign_stringpass(lhs)Assignment operator from string input.
string_assign_characterpass(lhs)Assignment operator from character input.
string_assign_integer_I1Ppass(lhs)Assignment operator from integer input.
string_assign_integer_I2Ppass(lhs)Assignment operator from integer input.
string_assign_integer_I4Ppass(lhs)Assignment operator from integer input.
string_assign_integer_I8Ppass(lhs)Assignment operator from integer input.
string_assign_real_R4Ppass(lhs)Assignment operator from real input.
string_assign_real_R8Ppass(lhs)Assignment operator from real input.
string_assign_real_R16Ppass(lhs)Assignment operator from real input.
string_concat_stringpass(lhs)Concatenation with string.
string_concat_characterpass(lhs)Concatenation with character.
character_concat_stringpass(rhs)Concatenation with character (inverted).
string_concat_string_stringpass(lhs)Concatenation with string (string output).
string_concat_character_stringpass(lhs)Concatenation with character (string output).
character_concat_string_stringpass(rhs)Concatenation with character (inverted, string output).
string_eq_stringpass(lhs)Equal to string logical operator.
string_eq_characterpass(lhs)Equal to character logical operator.
character_eq_stringpass(rhs)Equal to character (inverted) logical operator.
string_ne_stringpass(lhs)Not equal to string logical operator.
string_ne_characterpass(lhs)Not equal to character logical operator.
character_ne_stringpass(rhs)Not equal to character (inverted) logical operator.
string_lt_stringpass(lhs)Lower than to string logical operator.
string_lt_characterpass(lhs)Lower than to character logical operator.
character_lt_stringpass(rhs)Lower than to character (inverted) logical operator.
string_le_stringpass(lhs)Lower equal than to string logical operator.
string_le_characterpass(lhs)Lower equal than to character logical operator.
character_le_stringpass(rhs)Lower equal than to character (inverted) logical operator.
string_ge_stringpass(lhs)Greater equal than to string logical operator.
string_ge_characterpass(lhs)Greater equal than to character logical operator.
character_ge_stringpass(rhs)Greater equal than to character (inverted) logical operator.
string_gt_stringpass(lhs)Greater than to string logical operator.
string_gt_characterpass(lhs)Greater than to character logical operator.
character_gt_stringpass(rhs)Greater than to character (inverted) logical operator.
read_formattedpass(dtv)Formatted input.
read_delimitedpass(dtv)Read a delimited input.
read_undelimitedpass(dtv)Read an undelimited input.
read_undelimited_listdirectedpass(dtv)Read an undelimited list directed input.
write_formattedpass(dtv)Formatted output.
read_unformattedpass(dtv)Unformatted input.
write_unformattedpass(dtv)Unformatted output.
replace_one_occurrencepass(self)Replace the first occurrence of substring old by new.

Interfaces

glob

Overloading glob procedure.

fortran
 type(string)                  :: astring
 character(len=:), allocatable :: alist_chr(:)
 type(string),     allocatable :: alist_str(:)
 integer, parameter            :: Nf=5
 character(14)                 :: files(1:Nf)
 integer                       :: file_unit
 integer                       :: f
 integer                       :: ff
 logical                       :: test_passed
 do f=1, Nf
    files(f) = astring%tempname(prefix='foo-')
    open(newunit=file_unit, file=files(f))
    write(file_unit, *)f
    close(unit=file_unit)
 enddo
 call glob(self=astring, pattern='foo-*', list=alist_chr)
 call glob(self=astring, pattern='foo-*', list=alist_str)
 do f=1, Nf
    open(newunit=file_unit, file=files(f))
    close(unit=file_unit, status='delete')
 enddo
 test_passed = .false.
 outer_chr: do f=1, size(alist_chr, dim=1)
    do ff=1, Nf
       test_passed = alist_chr(f) == files(ff)
       if (test_passed) cycle outer_chr
    enddo
 enddo outer_chr
 if (test_passed) then
    test_passed = .false.
    outer_str: do f=1, size(alist_str, dim=1)
       do ff=1, Nf
          test_passed = alist_str(f) == files(ff)
          if (test_passed) cycle outer_str
       enddo
    enddo outer_str
 endif
 print '(L1)', test_passed

Module procedures: glob_character, glob_string

strjoin

Module procedures: strjoin_strings, strjoin_characters, strjoin_strings_array, strjoin_characters_array

adjustl

Builtin adjustl overloading.

Module procedures: sadjustl_character

adjustr

Builtin adjustr overloading.

Module procedures: sadjustr_character

count

Builtin count overloading.

Module procedures: count_substring

index

Builtin index overloading.

Module procedures: sindex_string_string, sindex_string_character, sindex_character_string

len_trim

Builtin len_trim overloading.

Module procedures: slen_trim

repeat

Builtin repeat overloading.

Module procedures: srepeat_string_string

scan

Builtin scan overloading.

Module procedures: sscan_string_string, sscan_string_character, sscan_character_string

trim

Builtin trim overloading.

Module procedures: strim

verify

Builtin verify overloading.

Module procedures: sverify_string_string, sverify_string_character, sverify_character_string

Subroutines

free

Free dynamic memory.

fortran
 type(string) :: astring
 astring = 'this is string example....wow!!!'
 call astring%free
 print '(L1)', astring%is_allocated().eqv..false.

Attributes: elemental

fortran
subroutine free(self)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inoutThe string.

glob_character

Glob search (character output), finds all the pathnames matching a given pattern according to the rules used by the Unix shell.

@note Method not portable: works only on Unix/GNU Linux OS.

fortran
 type(string)                  :: astring
 character(len=:), allocatable :: alist_chr(:)
 integer, parameter            :: Nf=5
 character(14)                 :: files(1:Nf)
 integer                       :: file_unit
 integer                       :: f
 integer                       :: ff
 logical                       :: test_passed
 do f=1, Nf
    files(f) = astring%tempname(prefix='foo-')
    open(newunit=file_unit, file=files(f))
    write(file_unit, *)f
    close(unit=file_unit)
 enddo
 call astring%glob(pattern='foo-*', list=alist_chr)
 do f=1, Nf
    open(newunit=file_unit, file=files(f))
    close(unit=file_unit, status='delete')
 enddo
 test_passed = .false.
 outer_chr: do f=1, size(alist_chr, dim=1)
    do ff=1, Nf
       test_passed = alist_chr(f) == files(ff)
       if (test_passed) cycle outer_chr
    enddo
 enddo outer_chr
 print '(L1)', test_passed
fortran
subroutine glob_character(self, pattern, list)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
patterncharacter(len=*)inGiven pattern.
listcharacter(len=:)outallocatableList of matching pathnames.

Call graph

glob_string

Glob search (string output), finds all the pathnames matching a given pattern according to the rules used by the Unix shell.

@note Method not portable: works only on Unix/GNU Linux OS.

fortran
 type(string)                  :: astring
 type(string),     allocatable :: alist_str(:)
 integer, parameter            :: Nf=5
 character(14)                 :: files(1:Nf)
 integer                       :: file_unit
 integer                       :: f
 integer                       :: ff
 logical                       :: test_passed

 do f=1, Nf
    files(f) = astring%tempname(prefix='foo-')
    open(newunit=file_unit, file=files(f))
    write(file_unit, *)f
    close(unit=file_unit)
 enddo
 call astring%glob(pattern='foo-*', list=alist_str)
 do f=1, Nf
    open(newunit=file_unit, file=files(f))
    close(unit=file_unit, status='delete')
 enddo
 test_passed = .false.
 outer_str: do f=1, size(alist_str, dim=1)
    do ff=1, Nf
       test_passed = alist_str(f) == files(ff)
       if (test_passed) cycle outer_str
    enddo
 enddo outer_str
 print '(L1)', test_passed
fortran
subroutine glob_string(self, pattern, list)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
patterncharacter(len=*)inGiven pattern.
listtype(string)outallocatableList of matching pathnames.

Call graph

read_file

Read a file as a single string stream.

@note All the lines are stored into the string self as a single ascii stream. Each line (record) is separated by a new_line character.

@note For unformatted read only access='stream' is supported with new_line as line terminator.

@note Fast file reading allows a very efficient reading of streamed file, but it dumps file as single streamed string.

fortran
 type(string)              :: astring
 type(string), allocatable :: strings(:)
 type(string)              :: line(3)
 integer                   :: iostat
 character(len=99)         :: iomsg
 integer                   :: scratch
 integer                   :: l
 logical                   :: test_passed(9)
 line(1) = ' Hello World!   '
 line(2) = 'How are you?  '
 line(3) = '   All say: "Fine thanks"'
 open(newunit=scratch, file='read_file_test.tmp')
 write(scratch, "(A)") line(1)%chars()
 write(scratch, "(A)") line(2)%chars()
 write(scratch, "(A)") line(3)%chars()
 close(scratch)
 call astring%read_file(file='read_file_test.tmp', iostat=iostat, iomsg=iomsg)
 call astring%split(tokens=strings, sep=new_line('a'))
 test_passed(1) = (size(strings, dim=1)==size(line, dim=1))
 do l=1, size(strings, dim=1)
   test_passed(l+1) = (strings(l)==line(l))
 enddo
 open(newunit=scratch, file='read_file_test.tmp', form='UNFORMATTED', access='STREAM')
 write(scratch) line(1)%chars()//new_line('a')
 write(scratch) line(2)%chars()//new_line('a')
 write(scratch) line(3)%chars()//new_line('a')
 close(scratch)
 call astring%read_file(file='read_file_test.tmp', form='unformatted', iostat=iostat, iomsg=iomsg)
 call astring%split(tokens=strings, sep=new_line('a'))
 test_passed(5) = (size(strings, dim=1)==size(line, dim=1))
 do l=1, size(strings, dim=1)
   test_passed(l+5) = (strings(l)==line(l))
 enddo
 open(newunit=scratch, file='read_file_test.tmp', form='UNFORMATTED', access='STREAM')
 close(scratch, status='DELETE')
 call astring%read_file(file='read_file_test.tmp', iostat=iostat)
 test_passed(9) = (iostat/=0)
 print '(L1)', all(test_passed)
fortran
subroutine read_file(self, file, is_fast, form, iostat, iomsg)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inoutThe string.
filecharacter(len=*)inFile name.
is_fastlogicalinoptionalFlag to enable (super) fast file reading.
formcharacter(len=*)inoptionalFormat of unit.
iostatintegeroutoptionalIO status code.
iomsgcharacter(len=*)inoutoptionalIO status message.

Call graph

read_line

Read line (record) from a connected unit.

The line is read as an ascii stream read until the eor is reached.

@note For unformatted read only access='stream' is supported with new_line as line terminator.

fortran
 type(string)      :: astring
 type(string)      :: line(3)
 integer           :: iostat
 character(len=99) :: iomsg
 integer           :: scratch
 integer           :: l
 logical           :: test_passed(6)
 line(1) = ' Hello World!   '
 line(2) = 'How are you?  '
 line(3) = '   All say: "Fine thanks"'
 open(newunit=scratch, status='SCRATCH')
 write(scratch, "(A)") line(1)%chars()
 write(scratch, "(A)") line(2)%chars()
 write(scratch, "(A)") line(3)%chars()
 rewind(scratch)
 l = 0
 iostat = 0
 do
   l = l + 1
   call astring%read_line(unit=scratch, iostat=iostat, iomsg=iomsg)
   if (iostat/=0.and..not.is_iostat_eor(iostat)) then
     exit
   else
     test_passed(l) = (astring==line(l))
   endif
 enddo
 close(scratch)
 open(newunit=scratch, status='SCRATCH', form='UNFORMATTED', access='STREAM')
 write(scratch) line(1)%chars()//new_line('a')
 write(scratch) line(2)%chars()//new_line('a')
 write(scratch) line(3)%chars()//new_line('a')
 rewind(scratch)
 l = 0
 iostat = 0
 do
   l = l + 1
   call astring%read_line(unit=scratch, iostat=iostat, iomsg=iomsg, form='UnfORMatteD')
   if (iostat/=0.and..not.is_iostat_eor(iostat)) then
     exit
   else
     test_passed(l+3) = (astring==line(l))
   endif
 enddo
 close(scratch)
 print '(L1)', all(test_passed)
fortran
subroutine read_line(self, unit, form, iostat, iomsg)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inoutThe string.
unitintegerinLogical unit.
formcharacter(len=*)inoptionalFormat of unit.
iostatintegeroutoptionalIO status code.
iomsgcharacter(len=*)inoutoptionalIO status message.

Call graph

read_lines

Read (all) lines (records) from a connected unit as a single ascii stream.

@note All the lines are stored into the string self as a single ascii stream. Each line (record) is separated by a new_line character. The line is read as an ascii stream read until the eor is reached.

@note The connected unit is rewinded. At a successful exit current record is at eof, at the beginning otherwise.

@note For unformatted read only access='stream' is supported with new_line as line terminator.

fortran
 type(string)              :: astring
 type(string), allocatable :: strings(:)
 type(string)              :: line(3)
 integer                   :: iostat
 character(len=99)         :: iomsg
 integer                   :: scratch
 integer                   :: l
 logical                   :: test_passed(8)

 line(1) = ' Hello World!   '
 line(2) = 'How are you?  '
 line(3) = '   All say: "Fine thanks"'
 open(newunit=scratch, status='SCRATCH')
 write(scratch, "(A)") line(1)%chars()
 write(scratch, "(A)") line(2)%chars()
 write(scratch, "(A)") line(3)%chars()
 call astring%read_lines(unit=scratch, iostat=iostat, iomsg=iomsg)
 call astring%split(tokens=strings, sep=new_line('a'))
 test_passed(1) = (size(strings, dim=1)==size(line, dim=1))
 do l=1, size(strings, dim=1)
   test_passed(l+1) = (strings(l)==line(l))
 enddo
 close(scratch)
 open(newunit=scratch, status='SCRATCH', form='UNFORMATTED', access='STREAM')
 write(scratch) line(1)%chars()//new_line('a')
 write(scratch) line(2)%chars()//new_line('a')
 write(scratch) line(3)%chars()//new_line('a')
 call astring%read_lines(unit=scratch, form='unformatted', iostat=iostat, iomsg=iomsg)
 call astring%split(tokens=strings, sep=new_line('a'))
 test_passed(5) = (size(strings, dim=1)==size(line, dim=1))
 do l=1, size(strings, dim=1)
   test_passed(l+5) = (strings(l)==line(l))
 enddo
 close(scratch)
 print '(L1)', all(test_passed)
fortran
subroutine read_lines(self, unit, form, iostat, iomsg)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inoutThe string.
unitintegerinLogical unit.
formcharacter(len=*)inoptionalFormat of unit.
iostatintegeroutoptionalIO status code.
iomsgcharacter(len=*)inoutoptionalIO status message.

Call graph

split

Return a list of substring in the string, using sep as the delimiter string.

@note Multiple subsequent separators are collapsed to one occurrence.

@note If max_tokens is passed the returned number of tokens is either max_tokens or max_tokens + 1.

fortran
 type(string)              :: astring
 type(string), allocatable :: strings(:)
 logical                   :: test_passed(11)
 astring = '+ab-++cre-++cre-ab+'
 call astring%split(tokens=strings, sep='+')
 test_passed(1) = (strings(1)//''=='ab-'.and.strings(2)//''=='cre-'.and.strings(3)//''=='cre-ab')
 astring = 'ab-++cre-++cre-ab+'
 call astring%split(tokens=strings, sep='+')
 test_passed(2) = (strings(1)//''=='ab-'.and.strings(2)//''=='cre-'.and.strings(3)//''=='cre-ab')
 astring = 'ab-++cre-++cre-ab'
 call astring%split(tokens=strings, sep='+')
 test_passed(3) = (strings(1)//''=='ab-'.and.strings(2)//''=='cre-'.and.strings(3)//''=='cre-ab')
 astring = 'Hello '//new_line('a')//'World!'
 call astring%split(tokens=strings, sep=new_line('a'))
 test_passed(4) = (strings(1)//''=='Hello '.and.strings(2)//''=='World!')
 astring = 'Hello World!'
 call astring%split(tokens=strings)
 test_passed(5) = (strings(1)//''=='Hello'.and.strings(2)//''=='World!')
 astring = '+ab-'
 call astring%split(tokens=strings, sep='+')
 test_passed(6) = (strings(1)//''=='ab-')
 astring = '+ab-'
 call astring%split(tokens=strings, sep='-')
 test_passed(7) = (strings(1)//''=='+ab')
 astring = '+ab-+cd-'
 call astring%split(tokens=strings, sep='+')
 test_passed(8) = (strings(1)//''=='ab-'.and.strings(2)//''=='cd-')
 astring = 'ab-+cd-+'
 call astring%split(tokens=strings, sep='+')
 test_passed(9) = (strings(1)//''=='ab-'.and.strings(2)//''=='cd-')
 astring = '+ab-+cd-+'
 call astring%split(tokens=strings, sep='+')
 test_passed(10) = (strings(1)//''=='ab-'.and.strings(2)//''=='cd-')
 astring = '1-2-3-4-5-6-7-8'
 call astring%split(tokens=strings, sep='-', max_tokens=3)
 test_passed(11) = (strings(1)//''=='1'.and.strings(2)//''=='2'.and.strings(3)//''=='3'.and.strings(4)//''=='4-5-6-7-8')
 print '(L1)', all(test_passed)

Attributes: pure

fortran
subroutine split(self, tokens, sep, max_tokens)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
tokenstype(string)outallocatableTokens substring.
sepcharacter(kind=CK, len=*)inoptionalSeparator.
max_tokensintegerinoptionalFix the maximum number of returned tokens.

Call graph

split_chunked

Return a list of substring in the string, using sep as the delimiter string, chunked (memory-efficient) algorithm.

@note Multiple subsequent separators are collapsed to one occurrence.

@note The split is performed in chunks of #chunks to avoid excessive memory consumption.

fortran
 type(string)              :: astring
 type(string), allocatable :: strings(:)
 logical                   :: test_passed(1)
 astring = '-1-2-3-4-5-6-7-8-'
 call astring%split_chunked(tokens=strings, sep='-', chunks=3)
 test_passed(1) = (strings(1)//''=='1'.and.strings(2)//''=='2'.and.strings(3)//''=='3'.and.strings(4)//''=='4'.and. &
                   strings(5)//''=='5'.and.strings(6)//''=='6'.and.strings(7)//''=='7'.and.strings(8)//''=='8')
 print '(L1)', all(test_passed)

Attributes: pure

fortran
subroutine split_chunked(self, tokens, chunks, sep)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
tokenstype(string)outallocatableTokens substring.
chunksintegerinNumber of chunks.
sepcharacter(kind=CK, len=*)inoptionalSeparator.

Call graph

write_file

Write a single string stream into file.

@note For unformatted read only access='stream' is supported with new_line as line terminator.

fortran
 type(string)              :: astring
 type(string)              :: anotherstring
 type(string), allocatable :: strings(:)
 type(string)              :: line(3)
 integer                   :: iostat
 character(len=99)         :: iomsg
 integer                   :: scratch
 integer                   :: l
 logical                   :: test_passed(8)
 line(1) = ' Hello World!   '
 line(2) = 'How are you?  '
 line(3) = '   All say: "Fine thanks"'
 anotherstring = anotherstring%join(array=line, sep=new_line('a'))
 call anotherstring%write_file(file='write_file_test.tmp', iostat=iostat, iomsg=iomsg)
 call astring%read_file(file='write_file_test.tmp', iostat=iostat, iomsg=iomsg)
 call astring%split(tokens=strings, sep=new_line('a'))
 test_passed(1) = (size(strings, dim=1)==size(line, dim=1))
 do l=1, size(strings, dim=1)
   test_passed(l+1) = (strings(l)==line(l))
 enddo
 call anotherstring%write_file(file='write_file_test.tmp', form='unformatted', iostat=iostat, iomsg=iomsg)
 call astring%read_file(file='write_file_test.tmp', form='unformatted', iostat=iostat, iomsg=iomsg)
 call astring%split(tokens=strings, sep=new_line('a'))
 test_passed(5) = (size(strings, dim=1)==size(line, dim=1))
 do l=1, size(strings, dim=1)
   test_passed(l+5) = (strings(l)==line(l))
 enddo
 open(newunit=scratch, file='write_file_test.tmp')
 close(unit=scratch, status='delete')
 print '(L1)', all(test_passed)
fortran
subroutine write_file(self, file, form, iostat, iomsg)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
filecharacter(len=*)inFile name.
formcharacter(len=*)inoptionalFormat of unit.
iostatintegeroutoptionalIO status code.
iomsgcharacter(len=*)inoutoptionalIO status message.

Call graph

write_line

Write line (record) to a connected unit.

@note If the connected unit is unformatted a new_line() character is added at the end (if necessary) to mark the end of line.

@note There is no doctests, this being tested by means of write_file doctests.

fortran
subroutine write_line(self, unit, form, iostat, iomsg)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
unitintegerinLogical unit.
formcharacter(len=*)inoptionalFormat of unit.
iostatintegeroutoptionalIO status code.
iomsgcharacter(len=*)inoutoptionalIO status message.

Call graph

write_lines

Write lines (records) to a connected unit.

This method checks if self contains more than one line (records) and writes them as lines (records).

@note If the connected unit is unformatted a new_line() character is added at the end (if necessary) to mark the end of line.

@note There is no doctests, this being tested by means of write_file doctests.

fortran
subroutine write_lines(self, unit, form, iostat, iomsg)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
unitintegerinLogical unit.
formcharacter(len=*)inoptionalFormat of unit.
iostatintegeroutoptionalIO status code.
iomsgcharacter(len=*)inoutoptionalIO status message.

Call graph

string_assign_string

Assignment operator from string input.

fortran
 type(string) :: astring
 type(string) :: anotherstring
 logical      :: test_passed(1)
 astring = 'hello'
 anotherstring = astring
 test_passed(1) = astring%chars()==anotherstring%chars()
 print '(L1)', all(test_passed)

Attributes: pure

fortran
subroutine string_assign_string(lhs, rhs)

Arguments

NameTypeIntentAttributesDescription
lhsclass(string)inoutLeft hand side.
rhstype(string)inRight hand side.

string_assign_character

Assignment operator from character input.

fortran
 type(string) :: astring
 logical      :: test_passed(1)
 astring = 'hello'
 test_passed(1) = astring%chars()=='hello'
 print '(L1)', all(test_passed)

Attributes: pure

fortran
subroutine string_assign_character(lhs, rhs)

Arguments

NameTypeIntentAttributesDescription
lhsclass(string)inoutLeft hand side.
rhscharacter(kind=CK, len=*)inRight hand side.

string_assign_integer_I1P

Assignment operator from integer input.

fortran
 use penf
 type(string) :: astring
 logical      :: test_passed(1)
 astring = 127_I1P
 test_passed(1) = astring%to_number(kind=1_I1P)==127_I1P
 print '(L1)', all(test_passed)

Attributes: pure

fortran
subroutine string_assign_integer_I1P(lhs, rhs)

Arguments

NameTypeIntentAttributesDescription
lhsclass(string)inoutLeft hand side.
rhsinteger(kind=I1P)inRight hand side.

string_assign_integer_I2P

Assignment operator from integer input.

fortran
 use penf
 type(string) :: astring
 logical      :: test_passed(1)
 astring = 127_I2P
 test_passed(1) = astring%to_number(kind=1_I2P)==127_I2P
 print '(L1)', all(test_passed)

Attributes: pure

fortran
subroutine string_assign_integer_I2P(lhs, rhs)

Arguments

NameTypeIntentAttributesDescription
lhsclass(string)inoutLeft hand side.
rhsinteger(kind=I2P)inRight hand side.

string_assign_integer_I4P

Assignment operator from integer input.

fortran
 use penf
 type(string) :: astring
 logical      :: test_passed(1)
 astring = 127_I4P
 test_passed(1) = astring%to_number(kind=1_I4P)==127_I4P
 print '(L1)', all(test_passed)

Attributes: pure

fortran
subroutine string_assign_integer_I4P(lhs, rhs)

Arguments

NameTypeIntentAttributesDescription
lhsclass(string)inoutLeft hand side.
rhsinteger(kind=I4P)inRight hand side.

string_assign_integer_I8P

Assignment operator from integer input.

fortran
 use penf
 type(string) :: astring
 logical      :: test_passed(1)
 astring = 127_I8P
 test_passed(1) = astring%to_number(kind=1_I8P)==127_I8P
 print '(L1)', all(test_passed)

Attributes: pure

fortran
subroutine string_assign_integer_I8P(lhs, rhs)

Arguments

NameTypeIntentAttributesDescription
lhsclass(string)inoutLeft hand side.
rhsinteger(kind=I8P)inRight hand side.

string_assign_real_R4P

Assignment operator from real input.

fortran
 use penf
 type(string) :: astring
 logical      :: test_passed(1)
 astring = 3.021e6_R4P
 test_passed(1) = astring%to_number(kind=1._R4P)==3.021e6_R4P
 print '(L1)', all(test_passed)

Attributes: pure

fortran
subroutine string_assign_real_R4P(lhs, rhs)

Arguments

NameTypeIntentAttributesDescription
lhsclass(string)inoutLeft hand side.
rhsreal(kind=R4P)inRight hand side.

string_assign_real_R8P

Assignment operator from real input.

fortran
 use penf
 type(string) :: astring
 logical      :: test_passed(1)
 astring = 3.021e6_R8P
 test_passed(1) = astring%to_number(kind=1._R8P)==3.021e6_R8P
 print '(L1)', all(test_passed)

Attributes: pure

fortran
subroutine string_assign_real_R8P(lhs, rhs)

Arguments

NameTypeIntentAttributesDescription
lhsclass(string)inoutLeft hand side.
rhsreal(kind=R8P)inRight hand side.

string_assign_real_R16P

Assignment operator from real input.

fortran
 use penf
 type(string) :: astring
 logical      :: test_passed(1)
 astring = 3.021e6_R8P
 test_passed(1) = astring%to_number(kind=1._R8P)==3.021e6_R8P
 print '(L1)', all(test_passed)

Attributes: pure

fortran
subroutine string_assign_real_R16P(lhs, rhs)

Arguments

NameTypeIntentAttributesDescription
lhsclass(string)inoutLeft hand side.
rhsreal(kind=R16P)inRight hand side.

read_formatted

Formatted input.

@bug Change temporary acks: find a more precise length of the input string and avoid the trimming!

@bug Read listdirected with and without delimiters does not work.

fortran
subroutine read_formatted(dtv, unit, iotype, v_list, iostat, iomsg)

Arguments

NameTypeIntentAttributesDescription
dtvclass(string)inoutThe string.
unitintegerinLogical unit.
iotypecharacter(len=*)inEdit descriptor.
v_listintegerinEdit descriptor list.
iostatintegeroutIO status code.
iomsgcharacter(len=*)inoutIO status message.

Call graph

read_delimited

Read a delimited string from a unit connected for formatted input.

If the closing delimiter is followed by end of record, then we return end of record.

@note This does not need a doctest, it being tested by [[string::read_formatted]].

fortran
subroutine read_delimited(dtv, unit, delim, iostat, iomsg)

Arguments

NameTypeIntentAttributesDescription
dtvclass(string)inoutThe string.
unitintegerinLogical unit.
delimcharacter(kind=CK, len=1)inString delimiter.
iostatintegeroutIO status code.
iomsgcharacter(kind=CK, len=*)inoutIO status message.

Call graph

read_undelimited_listdirected

Read an undelimited (no leading apostrophe or double quote) character value according to the rules for list directed input.

A blank, comma/semicolon (depending on the decimal mode), slash or end of record terminates the string.

If input is terminated by end of record, then this procedure returns an end-of-record condition.

fortran
subroutine read_undelimited_listdirected(dtv, unit, iostat, iomsg)

Arguments

NameTypeIntentAttributesDescription
dtvclass(string)inoutThe string.
unitintegerinLogical unit.
iostatintegeroutIO status code.
iomsgcharacter(len=*)inoutIO status message.

Call graph

read_undelimited

Read an undelimited string up until end of record or a character from a set of terminators is encountered.

If a terminator is encountered, the file position will be at that terminating character. If end of record is encountered, the file remains at end of record.

fortran
subroutine read_undelimited(dtv, unit, terminators, iostat, iomsg)

Arguments

NameTypeIntentAttributesDescription
dtvclass(string)inoutThe string.
unitintegerinLogical unit.
terminatorscharacter(kind=CK, len=*)inCharacters that are considered to terminate the string.
iostatintegeroutIO status code.
iomsgcharacter(len=*)inoutIO status message.

Call graph

write_formatted

Formatted output.

fortran
subroutine write_formatted(dtv, unit, iotype, v_list, iostat, iomsg)

Arguments

NameTypeIntentAttributesDescription
dtvclass(string)inThe string.
unitintegerinLogical unit.
iotypecharacter(kind=CK, len=*)inEdit descriptor.
v_listintegerinEdit descriptor list.
iostatintegeroutIO status code.
iomsgcharacter(kind=CK, len=*)inoutIO status message.

read_unformatted

Unformatted input.

@bug Change temporary acks: find a more precise length of the input string and avoid the trimming!

fortran
subroutine read_unformatted(dtv, unit, iostat, iomsg)

Arguments

NameTypeIntentAttributesDescription
dtvclass(string)inoutThe string.
unitintegerinLogical unit.
iostatintegeroutIO status code.
iomsgcharacter(kind=CK, len=*)inoutIO status message.

write_unformatted

Unformatted output.

fortran
subroutine write_unformatted(dtv, unit, iostat, iomsg)

Arguments

NameTypeIntentAttributesDescription
dtvclass(string)inThe string.
unitintegerinLogical unit.
iostatintegeroutIO status code.
iomsgcharacter(kind=CK, len=*)inoutIO status message.

get_delimiter_mode

Get the DELIM changeable connection mode for the given unit.

If the unit is connected to an internal file, then the default value of NONE is always returned.

fortran
subroutine get_delimiter_mode(unit, delim, iostat, iomsg)

Arguments

NameTypeIntentAttributesDescription
unitintegerinThe unit for the connection.
delimcharacter(kind=CK, len=1)outRepresents the value of the DELIM mode.
iostatintegeroutIOSTAT error code, non-zero on error.
iomsgcharacter(len=*)inoutIOMSG explanatory message - only defined if iostat is non-zero.

get_next_non_blank_character_this_record

Get the next non-blank character in the current record.

fortran
subroutine get_next_non_blank_character_this_record(unit, ch, iostat, iomsg)

Arguments

NameTypeIntentAttributesDescription
unitintegerinLogical unit.
chcharacter(kind=CK, len=1)outThe non-blank character read. Not valid if IOSTAT is non-zero.
iostatintegeroutIO status code.
iomsgcharacter(kind=CK, len=*)inoutIO status message.

Call graph

get_next_non_blank_character_any_record

Get the next non-blank character, advancing records if necessary.

fortran
subroutine get_next_non_blank_character_any_record(unit, ch, iostat, iomsg)

Arguments

NameTypeIntentAttributesDescription
unitintegerinLogical unit.
chcharacter(kind=CK, len=1)outThe non-blank character read. Not valid if IOSTAT is non-zero.
iostatintegeroutIO status code.
iomsgcharacter(kind=CK, len=*)inoutIO status message.

Call graph

get_decimal_mode

Get the DECIMAL changeable connection mode for the given unit.

If the unit is connected to an internal file, then the default value of DECIMAL is always returned. This may not be the actual value in force at the time of the call to this procedure.

fortran
subroutine get_decimal_mode(unit, decimal_point, iostat, iomsg)

Arguments

NameTypeIntentAttributesDescription
unitintegerinLogical unit.
decimal_pointlogicaloutTrue if the decimal mode is POINT, false otherwise.
iostatintegeroutIO status code.
iomsgcharacter(kind=CK, len=*)inoutIO status message.

Call graph

Functions

string_

Return a string given a character input.

fortran
 print "(L1)", string('Hello World')//''=='Hello World'

Attributes: pure

Returns: type(string)

fortran
function string_(c)

Arguments

NameTypeIntentAttributesDescription
ccharacter(len=*)inCharacter.

sadjustl_character

Left adjust a string by removing leading spaces (character output).

fortran
 type(string) :: astring
 astring = '   Hello World!'
 print "(L1)", adjustl(astring)=='Hello World!   '

Attributes: pure

Returns: character(kind=CK, len=:)

fortran
function sadjustl_character(s) result(adjusted)

Arguments

NameTypeIntentAttributesDescription
sclass(string)inString.

sadjustr_character

Right adjust a string by removing leading spaces (character output).

fortran
 type(string) :: astring
 astring = 'Hello World!   '
 print "(L1)", adjustr(astring)=='   Hello World!'

Attributes: pure

Returns: character(kind=CK, len=:)

fortran
function sadjustr_character(s) result(adjusted)

Arguments

NameTypeIntentAttributesDescription
sclass(string)inString.

count_substring

Count the number of occurences of a substring into a string.

fortran
 print "(L1)", count('hello', substring='ll')==1

Attributes: elemental

Returns: integer(kind=I4P)

fortran
function count_substring(s, substring) result(No)

Arguments

NameTypeIntentAttributesDescription
scharacter(len=*)inString.
substringcharacter(len=*)inSubstring.

sindex_character_string

Return the position of the start of the first occurrence of string substring as a substring in string, counting from one. If substring is not present in string, zero is returned. If the back argument is present and true, the return value is the start of the last occurrence rather than the first.

fortran
 type(string) :: string1
 logical      :: test_passed(2)
 string1 = 'llo'
 test_passed(1) = index(s='Hello World Hello!', substring=string1)==index(string='Hello World Hello!', substring='llo')
 test_passed(2) = index(s='Hello World Hello!', substring=string1, back=.true.)==index(string='Hello World Hello!', &
                                                                                       substring='llo', back=.true.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: integer

fortran
function sindex_character_string(s, substring, back) result(i)

Arguments

NameTypeIntentAttributesDescription
scharacter(kind=CK, len=*)inString.
substringtype(string)inSearched substring.
backlogicalinoptionalStart of the last occurrence rather than the first.

sscan_character_string

Return the leftmost (if back is either absent or equals false, otherwise the rightmost) character of string that is in set.

fortran
 type(string) :: string1
 logical      :: test_passed(2)
 string1 = 'llo'
 test_passed(1) = scan(s='Hello World Hello!', set=string1)==scan(string='Hello World Hello!', set='llo')
 test_passed(2) = scan(s='Hello World Hello!', set=string1, back=.true.)==scan(string='Hello World Hello!', &
                                                                               set='llo', back=.true.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: integer

fortran
function sscan_character_string(s, set, back) result(i)

Arguments

NameTypeIntentAttributesDescription
scharacter(kind=CK, len=*)inString.
settype(string)inSearched set.
backlogicalinoptionalStart of the last occurrence rather than the first.

sverify_character_string

Return the leftmost (if back is either absent or equals false, otherwise the rightmost) character of string that is not in set. If all characters of string are found in set, the result is zero.

fortran
 type(string) :: string1
 logical      :: test_passed(2)
 string1 = 'ell'
 test_passed(1) = verify(s='Hello World Hello!', set=string1)==verify(string='Hello World Hello!', set='llo')
 test_passed(2) = verify(s='Hello World Hello!', set=string1, back=.true.)==verify(string='Hello World Hello!', set='llo', &
                                                                                   back=.true.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: integer

fortran
function sverify_character_string(s, set, back) result(i)

Arguments

NameTypeIntentAttributesDescription
scharacter(kind=CK, len=*)inString.
settype(string)inSearched set.
backlogicalinoptionalStart of the last occurrence rather than the first.

sadjustl

Left adjust a string by removing leading spaces.

fortran
 type(string) :: astring
 astring = '   Hello World!'
 print "(L1)", astring%adjustl()//''=='Hello World!   '

Attributes: elemental

Returns: type(string)

fortran
function sadjustl(self) result(adjusted)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.

sadjustr

Right adjust a string by removing leading spaces.

fortran
 type(string) :: astring
 astring = 'Hello World!   '
 print "(L1)", astring%adjustr()//''=='   Hello World!'

Attributes: elemental

Returns: type(string)

fortran
function sadjustr(self) result(adjusted)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.

scount

Count the number of occurences of a substring into a string.

@note If ignore_isolated is set to true the eventual "isolated" occurences are ignored: an isolated occurrences are those occurrences happening at the start of string (thus not having a left companion) or at the end of the string (thus not having a right companion).

fortran
 type(string) :: astring
 logical      :: test_passed(4)
 astring = '   Hello World  !    '
 test_passed(1) = astring%count(substring=' ')==10
 astring = 'Hello World  !    '
 test_passed(2) = astring%count(substring=' ', ignore_isolated=.true.)==6
 astring = '    Hello World  !'
 test_passed(3) = astring%count(substring=' ', ignore_isolated=.true.)==6
 astring = '   Hello World  !    '
 test_passed(4) = astring%count(substring=' ', ignore_isolated=.true.)==8
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: integer

fortran
function scount(self, substring, ignore_isolated) result(No)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
substringcharacter(len=*)inSubstring.
ignore_isolatedlogicalinoptionalIgnore "isolated" occurrences.

sindex_string_string

Return the position of the start of the first occurrence of string substring as a substring in string, counting from one. If substring is not present in string, zero is returned. If the back argument is present and true, the return value is the start of the last occurrence rather than the first.

fortran
 type(string) :: string1
 type(string) :: string2
 logical      :: test_passed(2)
 string1 = 'Hello World Hello!'
 string2 = 'llo'
 test_passed(1) = string1%index(substring=string2)==index(string='Hello World Hello!', substring='llo')
 test_passed(2) = string1%index(substring=string2, back=.true.)==index(string='Hello World Hello!', substring='llo', &
                                                                       back=.true.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: integer

fortran
function sindex_string_string(self, substring, back) result(i)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
substringtype(string)inSearched substring.
backlogicalinoptionalStart of the last occurrence rather than the first.

sindex_string_character

Return the position of the start of the first occurrence of string substring as a substring in string, counting from one. If substring is not present in string, zero is returned. If the back argument is present and true, the return value is the start of the last occurrence rather than the first.

fortran
 type(string) :: string1
 logical      :: test_passed(2)
 string1 = 'Hello World Hello!'
 test_passed(1) = string1%index(substring='llo')==index(string='Hello World Hello!', substring='llo')
 test_passed(2) = string1%index(substring='llo', back=.true.)==index(string='Hello World Hello!', substring='llo', back=.true.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: integer

fortran
function sindex_string_character(self, substring, back) result(i)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
substringcharacter(kind=CK, len=*)inSearched substring.
backlogicalinoptionalStart of the last occurrence rather than the first.

slen

Return the length of a string.

fortran
 type(string) :: astring
 astring = 'Hello World!   '
 print "(L1)", astring%len()==len('Hello World!   ')

Attributes: elemental

Returns: integer

fortran
function slen(self) result(l)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.

slen_trim

Return the length of a string, ignoring any trailing blanks.

fortran
 type(string) :: astring
 astring = 'Hello World!   '
 print "(L1)", astring%len_trim()==len_trim('Hello World!   ')

Attributes: elemental

Returns: integer

fortran
function slen_trim(self) result(l)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.

srepeat_string_string

Concatenates several copies of an input string.

fortran
 type(string) :: astring
 astring = 'x'
 print "(L1)", astring%repeat(5)//''=='xxxxx'

Attributes: elemental

Returns: type(string)

fortran
function srepeat_string_string(self, ncopies) result(repeated)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inString to be repeated.
ncopiesintegerinNumber of string copies.

srepeat_character_string

Concatenates several copies of an input string.

fortran
 type(string) :: astring
 astring = 'y'
 print "(L1)", astring%repeat('x', 5)//''=='xxxxx'

Attributes: elemental

Returns: type(string)

fortran
function srepeat_character_string(rstring, ncopies) result(repeated)

Arguments

NameTypeIntentAttributesDescription
rstringcharacter(kind=CK, len=*)inString to be repeated.
ncopiesintegerinNumber of string copies.

sscan_string_string

Return the leftmost (if back is either absent or equals false, otherwise the rightmost) character of string that is in set.

fortran
 type(string) :: string1
 type(string) :: string2
 logical      :: test_passed(2)
 string1 = 'Hello World Hello!'
 string2 = 'llo'
 test_passed(1) = string1%scan(set=string2)==scan(string='Hello World Hello!', set='llo')
 test_passed(2) = string1%scan(set=string2, back=.true.)==scan(string='Hello World Hello!', set='llo', back=.true.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: integer

fortran
function sscan_string_string(self, set, back) result(i)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
settype(string)inSearched set.
backlogicalinoptionalStart of the last occurrence rather than the first.

sscan_string_character

Return the leftmost (if back is either absent or equals false, otherwise the rightmost) character of string that is in set.

fortran
 type(string) :: string1
 logical      :: test_passed(2)
 string1 = 'Hello World Hello!'
 test_passed(1) = string1%scan(set='llo')==scan(string='Hello World Hello!', set='llo')
 test_passed(2) = string1%scan(set='llo', back=.true.)==scan(string='Hello World Hello!', set='llo', back=.true.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: integer

fortran
function sscan_string_character(self, set, back) result(i)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
setcharacter(kind=CK, len=*)inSearched set.
backlogicalinoptionalStart of the last occurrence rather than the first.

strim

Remove trailing spaces.

fortran
 type(string) :: astring
 astring = 'Hello World!   '
 print "(L1)", astring%trim()==trim('Hello World!   ')

Attributes: elemental

Returns: type(string)

fortran
function strim(self) result(trimmed)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.

sverify_string_string

Return the leftmost (if back is either absent or equals false, otherwise the rightmost) character of string that is not in set. If all characters of string are found in set, the result is zero.

fortran
 type(string) :: string1
 type(string) :: string2
 logical      :: test_passed(2)
 string1 = 'Hello World Hello!'
 string2 = 'llo'
 test_passed(1) = string1%verify(set=string2)==verify(string='Hello World Hello!', set='llo')
 test_passed(2) = string1%verify(set=string2, back=.true.)==verify(string='Hello World Hello!', set='llo', back=.true.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: integer

fortran
function sverify_string_string(self, set, back) result(i)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
settype(string)inSearched set.
backlogicalinoptionalStart of the last occurrence rather than the first.

sverify_string_character

Return the leftmost (if back is either absent or equals false, otherwise the rightmost) character of string that is not in set. If all characters of string are found in set, the result is zero.

fortran
 type(string) :: string1
 logical      :: test_passed(2)
 string1 = 'Hello World Hello!'
 test_passed(1) = string1%verify(set='llo')==verify(string='Hello World Hello!', set='llo')
 test_passed(2) = string1%verify(set='llo', back=.true.)==verify(string='Hello World Hello!', set='llo', back=.true.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: integer

fortran
function sverify_string_character(self, set, back) result(i)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
setcharacter(kind=CK, len=*)inSearched set.
backlogicalinoptionalStart of the last occurrence rather than the first.

basedir

Return the base directory name of a string containing a file name.

fortran
 type(string) :: string1
 logical      :: test_passed(4)
 string1 = '/bar/foo.tar.bz2'
 test_passed(1) = string1%basedir()//''=='/bar'
 string1 = './bar/foo.tar.bz2'
 test_passed(2) = string1%basedir()//''=='./bar'
 string1 = 'bar/foo.tar.bz2'
 test_passed(3) = string1%basedir()//''=='bar'
 string1 = '\bar\foo.tar.bz2'
 test_passed(4) = string1%basedir(sep='\')//''=='\bar'
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: type(string)

fortran
function basedir(self, sep)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
sepcharacter(kind=CK, len=*)inoptionalDirectory separator.

basename

Return the base file name of a string containing a file name.

Optionally, the extension is also stripped if provided or the last one if required, e.g.

fortran
 type(string) :: astring
 logical      :: test_passed(5)
 astring = 'bar/foo.tar.bz2'
 test_passed(1) = astring%basename()//''=='foo.tar.bz2'
 test_passed(2) = astring%basename(extension='.tar.bz2')//''=='foo'
 test_passed(3) = astring%basename(strip_last_extension=.true.)//''=='foo.tar'
 astring = '\bar\foo.tar.bz2'
 test_passed(4) = astring%basename(sep='\')//''=='foo.tar.bz2'
 astring = 'bar'
 test_passed(5) = astring%basename(strip_last_extension=.true.)//''=='bar'
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: type(string)

fortran
function basename(self, sep, extension, strip_last_extension)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
sepcharacter(kind=CK, len=*)inoptionalDirectory separator.
extensioncharacter(kind=CK, len=*)inoptionalFile extension.
strip_last_extensionlogicalinoptionalFlag to enable the stripping of last extension.

camelcase

Return a string with all words capitalized without spaces.

@note Multiple subsequent separators are collapsed to one occurence.

fortran
 type(string) :: astring
 astring = 'caMeL caSe var'
 print '(L1)', astring%camelcase()//''=='CamelCaseVar'

Attributes: elemental

Returns: type(string)

fortran
function camelcase(self, sep)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
sepcharacter(kind=CK, len=*)inoptionalSeparator.

Call graph

capitalize

Return a string with its first character capitalized and the rest lowercased.

fortran
 type(string) :: astring
 astring = 'say all Hello WorLD!'
 print '(L1)', astring%capitalize()//''=='Say all hello world!'

Attributes: elemental

Returns: type(string)

fortran
function capitalize(self) result(capitalized)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.

Call graph

chars

Return the raw characters data.

fortran
 type(string) :: astring
 astring = 'say all Hello WorLD!'
 print '(L1)', astring%chars()=='say all Hello WorLD!'

Attributes: pure

Returns: character(kind=CK, len=:)

fortran
function chars(self) result(raw)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.

Call graph

colorize_str

Colorize and stylize strings, DEFAULT kind.

fortran
 type(string) :: astring
 astring = 'say all Hello WorLD!'
 print '(L1)', astring%colorize(color_fg='red')=='say all Hello WorLD!'

Attributes: pure

Returns: character(len=:)

fortran
function colorize_str(self, color_fg, color_bg, style) result(colorized)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
color_fgcharacter(len=*)inoptionalForeground color definition.
color_bgcharacter(len=*)inoptionalBackground color definition.
stylecharacter(len=*)inoptionalStyle definition.

Call graph

decode

Return a string decoded accordingly the codec.

@note Only BASE64 codec is currently available.

fortran
 type(string) :: astring
 astring = 'SG93IGFyZSB5b3U/'
 print '(L1)', astring%decode(codec='base64')//''=='How are you?'

Attributes: elemental

Returns: type(string)

fortran
function decode(self, codec) result(decoded)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
codeccharacter(kind=CK, len=*)inEncoding codec.

Call graph

encode

Return a string encoded accordingly the codec.

@note Only BASE64 codec is currently available.

fortran
 type(string) :: astring
 astring = 'How are you?'
 print '(L1)', astring%encode(codec='base64')//''=='SG93IGFyZSB5b3U/'

Attributes: elemental

Returns: type(string)

fortran
function encode(self, codec) result(encoded)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
codeccharacter(kind=CK, len=*)inEncoding codec.

Call graph

escape

Escape backslashes (or custom escape character).

fortran
 type(string) :: astring
 logical      :: test_passed(2)
 astring = '^\s \d+\s*'
 test_passed(1) = astring%escape(to_escape='\')//''=='^\\s \\d+\\s*'
 test_passed(2) = astring%escape(to_escape='\', esc='|')//''=='^|\s |\d+|\s*'
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: type(string)

fortran
function escape(self, to_escape, esc) result(escaped)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
to_escapecharacter(kind=CK, len=1)inCharacter to be escaped.
esccharacter(kind=CK, len=*)inoptionalCharacter used to escape.

extension

Return the extension of a string containing a file name.

fortran
 type(string) :: astring
 astring = '/bar/foo.tar.bz2'
 print '(L1)', astring%extension()//''=='.bz2'

Attributes: elemental

Returns: type(string)

fortran
function extension(self)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.

fill

Pad string on the left (or right) with zeros (or other char) to fill width.

fortran
 type(string) :: astring
 logical      :: test_passed(4)
 astring = 'this is string example....wow!!!'
 test_passed(1) = astring%fill(width=40)//''=='00000000this is string example....wow!!!'
 test_passed(2) = astring%fill(width=50)//''=='000000000000000000this is string example....wow!!!'
 test_passed(3) = astring%fill(width=50, right=.true.)//''=='this is string example....wow!!!000000000000000000'
 test_passed(4) = astring%fill(width=40, filling_char='*')//''=='********this is string example....wow!!!'
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: type(string)

fortran
function fill(self, width, right, filling_char) result(filled)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
widthintegerinFinal width of filled string.
rightlogicalinoptionalFill on the right instead of left.
filling_charcharacter(kind=CK, len=1)inoptionalFilling character (default "0").

insert_character

Insert substring into string at a specified position.

fortran
 type(string)                  :: astring
 character(len=:), allocatable :: acharacter
 logical                       :: test_passed(5)
 astring = 'this is string example wow!!!'
 acharacter = '... '
 test_passed(1) = astring%insert(substring=acharacter, pos=1)//''=='... this is string example wow!!!'
 test_passed(2) = astring%insert(substring=acharacter, pos=23)//''=='this is string example...  wow!!!'
 test_passed(3) = astring%insert(substring=acharacter, pos=29)//''=='this is string example wow!!!... '
 test_passed(4) = astring%insert(substring=acharacter, pos=-1)//''=='... this is string example wow!!!'
 test_passed(5) = astring%insert(substring=acharacter, pos=100)//''=='this is string example wow!!!... '
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: type(string)

fortran
function insert_character(self, substring, pos) result(inserted)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
substringcharacter(len=*)inSubstring.
posintegerinPosition from which insert substring.

insert_string

Insert substring into string at a specified position.

fortran
 type(string) :: astring
 type(string) :: anotherstring
 logical      :: test_passed(5)
 astring = 'this is string example wow!!!'
 anotherstring = '... '
 test_passed(1) = astring%insert(substring=anotherstring, pos=1)//''=='... this is string example wow!!!'
 test_passed(2) = astring%insert(substring=anotherstring, pos=23)//''=='this is string example...  wow!!!'
 test_passed(3) = astring%insert(substring=anotherstring, pos=29)//''=='this is string example wow!!!... '
 test_passed(4) = astring%insert(substring=anotherstring, pos=-1)//''=='... this is string example wow!!!'
 test_passed(5) = astring%insert(substring=anotherstring, pos=100)//''=='this is string example wow!!!... '
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: type(string)

fortran
function insert_string(self, substring, pos) result(inserted)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
substringtype(string)inSubstring.
posintegerinPosition from which insert substring.

join_strings

Return a string that is a join of an array of strings.

The join-separator is set equals to self if self has a value or it is set to a null string ''. This value can be overridden passing a custom separator.

fortran
 type(string) :: astring
 type(string) :: strings(3)
 logical      :: test_passed(5)
 strings(1) = 'one'
 strings(2) = 'two'
 strings(3) = 'three'
 test_passed(1) = (astring%join(array=strings)//''==strings(1)//strings(2)//strings(3))
 test_passed(2) = (astring%join(array=strings, sep='-')//''==strings(1)//'-'//strings(2)//'-'//strings(3))
 call strings(1)%free
 strings(2) = 'two'
 strings(3) = 'three'
 test_passed(3) = (astring%join(array=strings, sep='-')//''==strings(2)//'-'//strings(3))
 strings(1) = 'one'
 strings(2) = 'two'
 call strings(3)%free
 test_passed(4) = (astring%join(array=strings, sep='-')//''==strings(1)//'-'//strings(2))
 strings(1) = 'one'
 call strings(2)%free
 strings(3) = 'three'
 test_passed(5) = (astring%join(array=strings, sep='-')//''==strings(1)//'-'//strings(3))
 print '(L1)', all(test_passed)

Attributes: pure

Returns: type(string)

fortran
function join_strings(self, array, sep) result(join)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
arraytype(string)inArray to be joined.
sepcharacter(kind=CK, len=*)inoptionalSeparator.

join_characters

Return a string that is a join of an array of characters.

The join-separator is set equals to self if self has a value or it is set to a null string ''. This value can be overridden passing a custom separator.

fortran
 type(string) :: astring
 character(5) :: characters(3)
 logical      :: test_passed(6)
 characters(1) = 'one'
 characters(2) = 'two'
 characters(3) = 'three'
 test_passed(1) = (astring%join(array=characters)//''==characters(1)//characters(2)//characters(3))
 test_passed(2) = (astring%join(array=characters, sep='-')//''==characters(1)//'-'//characters(2)//'-'//characters(3))
 characters(1) = ''
 characters(2) = 'two'
 characters(3) = 'three'
 test_passed(3) = (astring%join(array=characters, sep='-')//''==characters(2)//'-'//characters(3))
 characters(1) = 'one'
 characters(2) = 'two'
 characters(3) = ''
 test_passed(4) = (astring%join(array=characters, sep='-')//''==characters(1)//'-'//characters(2))
 characters(1) = 'one'
 characters(2) = ''
 characters(3) = 'three'
 test_passed(5) = (astring%join(array=characters, sep='-')//''==characters(1)//'-'//characters(3))
 characters(1) = 'one'
 characters(2) = 'two'
 characters(3) = 'three'
 astring = '_'
 test_passed(6) = (astring%join(array=characters)//''==characters(1)//'_'//characters(2)//'_'//characters(3))
 print '(L1)', all(test_passed)

Attributes: pure

Returns: type(string)

fortran
function join_characters(self, array, sep) result(join)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
arraycharacter(kind=CK, len=*)inArray to be joined.
sepcharacter(kind=CK, len=*)inoptionalSeparator.

strjoin_strings

Return a string that is a join of an array of strings.

The join-separator is set equals to a null string '' if custom separator isn't specified.

fortran
 type(string)     :: strings(3)
 logical          :: test_passed(5)
 strings(1) = 'one'
 strings(2) = 'two'
 strings(3) = 'three'
 test_passed(1) = (strjoin(array=strings)//''==strings(1)//strings(2)//strings(3))
 test_passed(2) = (strjoin(array=strings, sep='-')//''==strings(1)//'-'//strings(2)//'-'//strings(3))
 call strings(1)%free
 strings(2) = 'two'
 strings(3) = 'three'
 test_passed(3) = (strjoin(array=strings, sep='-')//''==strings(2)//'-'//strings(3))
 strings(1) = 'one'
 strings(2) = 'two'
 call strings(3)%free
 test_passed(4) = (strjoin(array=strings, sep='-')//''==strings(1)//'-'//strings(2))
 strings(1) = 'one'
 call strings(2)%free
 strings(3) = 'three'
 test_passed(5) = (strjoin(array=strings, sep='-')//''==strings(1)//'-'//strings(3))
 print '(L1)', all(test_passed)

Attributes: pure

Returns: type(string)

fortran
function strjoin_strings(array, sep) result(join)

Arguments

NameTypeIntentAttributesDescription
arrayclass(string)inArray to be joined.
sepcharacter(kind=CK, len=*)inoptionalSeparator.

Call graph

strjoin_characters

Return a string that is a join of an array of characters.

The join-separator is set equals to a null string '' if custom separator isn't specified. The trim function is applied to array items if optional logical is_trim variable isn't set to .false.

fortran
 character(5) :: characters(3)
 logical      :: test_passed(13)
 characters(1) = 'one'
 characters(2) = 'two'
 characters(3) = 'three'
 test_passed(1) = (strjoin(array=characters)//''==trim(characters(1))//trim(characters(2))//trim(characters(3)))
 test_passed(2) = (strjoin(array=characters, sep='-')//''==trim(characters(1))//'-'//trim(characters(2))//'-'//trim(characters(3)))
 test_passed(3) = ( strjoin(array=characters, is_trim=.false.)//''==characters(1)//characters(2)//characters(3))
 test_passed(4) = ( strjoin(array=characters, sep='-', is_trim=.false.)//''==characters(1)//'-'//characters(2)//'-'//characters(3))
 characters(1) = ''
 characters(2) = 'two'
 characters(3) = 'three'
 test_passed(5) = (strjoin(array=characters)//''==trim(characters(2))//trim(characters(3)))
 characters(1) = 'one'
 characters(2) = 'two'
 characters(3) = ''
 test_passed(6) = (strjoin(array=characters)//''==trim(characters(1))//trim(characters(2)))
 characters(1) = 'one'
 characters(2) = ''
 characters(3) = 'three'
 test_passed(7) = (strjoin(array=characters)//''==trim(characters(1))//trim(characters(3)))
 characters(1) = ''
 characters(2) = 'two'
 characters(3) = 'three'
 test_passed(8) = (strjoin(array=characters, sep='-')//''==trim(characters(2))//'-'//trim(characters(3)))
 characters(1) = 'one'
 characters(2) = 'two'
 characters(3) = ''
 test_passed(9) = (strjoin(array=characters, sep='-')//''==trim(characters(1))//'-'//trim(characters(2)))
 characters(1) = 'one'
 characters(2) = ''
 characters(3) = 'three'
 test_passed(10) = (strjoin(array=characters, sep='-')//''==trim(characters(1))//'-'//trim(characters(3)))
 characters(1) = ''
 characters(2) = 'two'
 characters(3) = 'three'
 test_passed(11) = (strjoin(array=characters, sep='-', is_trim=.false.)//''==characters(2)//'-'//characters(3))
 characters(1) = 'one'
 characters(2) = 'two'
 characters(3) = ''
 test_passed(12) = (strjoin(array=characters, sep='-', is_trim=.false.)//''==characters(1)//'-'//characters(2))
 characters(1) = 'one'
 characters(2) = ''
 characters(3) = 'three'
 test_passed(13) = (strjoin(array=characters, sep='-', is_trim=.false.)//''==characters(1)//'-'//characters(3))
 print '(L1)', all(test_passed)

Attributes: pure

Returns: type(string)

fortran
function strjoin_characters(array, sep, is_trim) result(join)

Arguments

NameTypeIntentAttributesDescription
arraycharacter(kind=CK, len=*)inArray to be joined.
sepcharacter(kind=CK, len=*)inoptionalSeparator.
is_trimlogicalinoptionalFlag to setup trim character or not

Call graph

strjoin_strings_array

Return a string that is a join of columns or rows of an array of strings.

The join-separator is set equals to a null string '' if custom separator isn't specified. The is_col is setup the direction of join: within default columns (.true.) or rows(.false.).

fortran
 type(string), allocatable :: strings_arr(:, :)
 logical                   :: test_passed(5)

 strings_arr = reshape( source = &
                        [string('one'), string('two'), string('three'),  &
                         string('ONE'), string('TWO'), string('THREE')], &
                        shape = [3, 2] )

 test_passed(1) = all( strjoin(array=strings_arr) == &
                       reshape([string('onetwothree'), string('ONETWOTHREE')], &
                       shape = [2]) )

 test_passed(2) = all( strjoin(array=strings_arr, sep='_') == &
                       reshape([string('one_two_three'), string('ONE_TWO_THREE')], &
                       shape = [2]) )

  test_passed(3) = all( strjoin(array=strings_arr, is_col=.false.) == &
                        reshape([string('oneONE'), string('twoTWO'), string('threeTHREE')], &
                        shape = [3]) )

  test_passed(4) = all( strjoin(array=strings_arr, sep='_', is_col=.false.) == &
                        reshape([string('one_ONE'), string('two_TWO'), string('three_THREE')], &
                        shape = [3]) )

 call strings_arr(2, 1)%free
 test_passed(5) = all( strjoin(array=strings_arr, sep='_', is_col=.false.) == &
                  reshape([string('one_ONE'), string('TWO'), string('three_THREE')], &
                  shape = [3]) )

 print '(L1)', all(test_passed)

Attributes: pure

Returns: type(string)

fortran
function strjoin_strings_array(array, sep, is_col) result(join)

Arguments

NameTypeIntentAttributesDescription
arrayclass(string)inArray to be joined.
sepcharacter(kind=CK, len=*)inoptionalSeparator.
is_collogicalinoptionalDirection: 'columns' if .true. or 'rows' if .false.

Call graph

strjoin_characters_array

Return a string that is a join of columns or rows of an array of characters.

The join-separator is set equals to a null string '' if custom separator isn't specified. The trim function is applied to array items if optional logical is_trim variable isn't set to .false. The is_col is setup the direction of join: within default columns (.true.) or rows(.false.).

fortran
 character(len=10)         :: chars_arr(3, 2)
 logical                   :: test_passed(9)
 chars_arr(:, 1) = ['one       ', 'two       ', 'three     ']
 chars_arr(:, 2) = ['ONE       ', 'TWO       ', 'THREE     ']

 test_passed(1) = all( strjoin(array=chars_arr) == &
                       reshape([string('onetwothree'), string('ONETWOTHREE')], &
                       shape = [2]) )

 test_passed(2) = all( strjoin(array=chars_arr, is_trim=.false.) ==  &
                       reshape([string('one       two       three     '),  &
                                string('ONE       TWO       THREE     ')], &
                       shape = [2]) )

 test_passed(3) = all( strjoin(array=chars_arr, sep='_') == &
                       reshape([string('one_two_three'), string('ONE_TWO_THREE')], &
                       shape = [2]) )

 test_passed(4) = all( strjoin(array=chars_arr, sep='_', is_trim=.false.) ==  &
                       reshape([string('one       _two       _three     '),  &
                                string('ONE       _TWO       _THREE     ')], &
                       shape = [2]) )

 test_passed(5) = all( strjoin(array=chars_arr, is_col=.false.) == &
                       reshape([string('oneONE'), string('twoTWO'), string('threeTHREE')], &
                       shape = [3]) )

 test_passed(6) = all( strjoin(array=chars_arr, is_trim=.false., is_col=.false.) ==  &
                       reshape([string('one       ONE       '),  &
                                string('two       TWO       '),  &
                                string('three     THREE     ')], &
                       shape = [3]) )

 test_passed(7) = all( strjoin(array=chars_arr, sep='_', is_col=.false.) == &
                       reshape([string('one_ONE'), string('two_TWO'), string('three_THREE')], &
                       shape = [3]) )

 test_passed(8) = all( strjoin(array=chars_arr, sep='_', is_trim=.false., is_col=.false.) ==  &
                       reshape([string('one       _ONE       '),  &
                                string('two       _TWO       '),  &
                                string('three     _THREE     ')], &
                       shape = [3]) )

 chars_arr(2,1) = ''
 test_passed(9) = all( strjoin(array=chars_arr, sep='_', is_col=.false.) ==  &
                       reshape([string('one_ONE'),  &
                                string('TWO'),  &
                                string('three_THREE')], &
                       shape = [3]) )

 print '(L1)', all(test_passed)

all items of character array have equal lengths

Attributes: pure

Returns: type(string)

fortran
function strjoin_characters_array(array, sep, is_trim, is_col) result(join)

Arguments

NameTypeIntentAttributesDescription
arraycharacter(kind=CK, len=*)inArray to be joined.
sepcharacter(kind=CK, len=*)inoptionalSeparator.
is_trimlogicalinoptionalFlag to setup trim character or not
is_collogicalinoptionalDirection: 'columns' if .true. or 'rows' if .false.

Call graph

lower

Return a string with all lowercase characters.

fortran
 type(string) :: astring
 logical      :: test_passed(1)
 astring = 'Hello WorLD!'
 test_passed(1) = astring%lower()//''=='hello world!'
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: type(string)

fortran
function lower(self)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.

Call graph

partition

Split string at separator and return the 3 parts (before, the separator and after).

fortran
 type(string) :: astring
 type(string) :: strings(3)
 logical      :: test_passed(3)
 astring = 'Hello WorLD!'
 strings = astring%partition(sep='lo Wo')
 test_passed(1) = (strings(1)//''=='Hel'.and.strings(2)//''=='lo Wo'.and.strings(3)//''=='rLD!')
 strings = astring%partition(sep='Hello')
 test_passed(2) = (strings(1)//''==''.and.strings(2)//''=='Hello'.and.strings(3)//''==' WorLD!')
 astring = 'Hello WorLD!'
 strings = astring%partition()
 test_passed(3) = (strings(1)//''=='Hello'.and.strings(2)//''==' '.and.strings(3)//''=='WorLD!')
 print '(L1)', all(test_passed)

Attributes: pure

Returns: type(string)

fortran
function partition(self, sep) result(partitions)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
sepcharacter(kind=CK, len=*)inoptionalSeparator.

Call graph

replace

Return a string with all occurrences of substring old replaced by new.

fortran
 type(string) :: astring
 logical      :: test_passed(4)
 astring = 'When YOU are sad YOU should think to me :-)'
 test_passed(1) = (astring%replace(old='YOU', new='THEY')//''=='When THEY are sad THEY should think to me :-)')
 test_passed(2) = (astring%replace(old='YOU', new='THEY', count=1)//''=='When THEY are sad YOU should think to me :-)')
 astring = repeat(new_line('a')//'abcd', 20)
 astring = astring%replace(old=new_line('a'), new='|cr|')
 astring = astring%replace(old='|cr|', new=new_line('a')//'    ')
 test_passed(3) = (astring//''==repeat(new_line('a')//'    '//'abcd', 20))
 astring = 'abcd  efg    hlmn'
 astring = astring%replace(old='', new='-')
 test_passed(4) = (astring//''=='abcd  efg    hlmn')
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: type(string)

fortran
function replace(self, old, new, count) result(replaced)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
oldcharacter(kind=CK, len=*)inOld substring.
newcharacter(kind=CK, len=*)inNew substring.
countintegerinoptionalNumber of old occurences to be replaced.

Call graph

reverse

Return a reversed string.

fortran
 type(string) :: astring
 logical      :: test_passed(2)
 astring = 'abcdefghilmnopqrstuvz'
 test_passed(1) = (astring%reverse()//''=='zvutsrqponmlihgfedcba')
 astring = '0123456789'
 test_passed(2) = (astring%reverse()//''=='9876543210')
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: type(string)

fortran
function reverse(self) result(reversed)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.

Search for tagged record into string, return the first record found (if any) matching the tags.

Optionally, returns the indexes of tag start/end, thus this is not an elemental function.

@note The tagged record is searched into self if allocated otherwise into in_string if passed or, eventually, into in_character is passed. If tag is not found the return string is not allocated and the start/end indexes (if requested) are zero.

fortran
 type(string)                  :: astring
 type(string)                  :: anotherstring
 character(len=:), allocatable :: acharacter
 integer                       :: istart
 integer                       :: iend
 logical                       :: test_passed(5)
 astring = '<test> <first> hello </first> <first> not the first </first> </test>'
 anotherstring = astring%search(tag_start='<first>', tag_end='</first>')
 test_passed(1) = anotherstring//''=='<first> hello </first>'
 astring = '<test> <a> <a> <a> the nested a </a> </a> </a> </test>'
 anotherstring = astring%search(tag_start='<a>', tag_end='</a>')
 test_passed(2) = anotherstring//''=='<a> <a> <a> the nested a </a> </a> </a>'
 call astring%free
 anotherstring = '<test> <a> <a> <a> the nested a </a> </a> </a> </test>'
 astring = astring%search(in_string=anotherstring, tag_start='<a>', tag_end='</a>')
 test_passed(3) = astring//''=='<a> <a> <a> the nested a </a> </a> </a>'
 call astring%free
 acharacter = '<test> <a> <a> <a> the nested a </a> </a> </a> </test>'
 astring = astring%search(in_character=acharacter, tag_start='<a>', tag_end='</a>')
 test_passed(4) = astring//''=='<a> <a> <a> the nested a </a> </a> </a>'
 acharacter = '<test> <first> hello </first> <sec> <sec>not the first</sec> </sec> </test>'
 astring = astring%search(in_character=acharacter, tag_start='<sec>', tag_end='</sec>', istart=istart, iend=iend)
 test_passed(5) = astring//''==acharacter(31:67)
 print '(L1)', all(test_passed)

Returns: type(string)

fortran
function search(self, tag_start, tag_end, in_string, in_character, istart, iend) result(tag)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
tag_startcharacter(kind=CK, len=*)inStart tag.
tag_endcharacter(kind=CK, len=*)inEnd tag.
in_stringtype(string)inoptionalSearch into this string.
in_charactercharacter(kind=CK, len=*)inoptionalSearch into this character string.
istartintegeroutoptionalStarting index of tag inside the string.
iendintegeroutoptionalEnding index of tag inside the string.

slice

Return the raw characters data sliced.

fortran
 type(string) :: astring
 astring = 'the Quick Brown fox Jumps over the Lazy Dog.'
 print "(A)", astring%slice(11,25)

Attributes: pure

Returns: character(kind=CK, len=:)

fortran
function slice(self, istart, iend) result(raw)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
istartintegerinSlice start index.
iendintegerinSlice end index.

snakecase

Return a string with all words lowercase separated by "_".

@note Multiple subsequent separators are collapsed to one occurence.

fortran
 type(string) :: astring
 logical      :: test_passed(1)
 astring = 'the Quick Brown fox Jumps over the Lazy Dog.'
 test_passed(1) = astring%snakecase()//''=='the_quick_brown_fox_jumps_over_the_lazy_dog.'
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: type(string)

fortran
function snakecase(self, sep)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
sepcharacter(kind=CK, len=*)inoptionalSeparator.

Call graph

startcase

Return a string with all words capitalized, e.g. title case.

@note Multiple subsequent separators are collapsed to one occurence.

fortran
 type(string) :: astring
 logical      :: test_passed(1)
 astring = 'the Quick Brown fox Jumps over the Lazy Dog.'
 test_passed(1) = astring%startcase()//''=='The Quick Brown Fox Jumps Over The Lazy Dog.'
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: type(string)

fortran
function startcase(self, sep)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
sepcharacter(kind=CK, len=*)inoptionalSeparator.

Call graph

strip

Return a copy of the string with the leading and trailing characters removed.

@note Multiple subsequent separators are collapsed to one occurence.

fortran
 type(string) :: astring
 logical      :: test_passed(1)
 astring = '  Hello World!   '
 test_passed(1) = astring%strip()//''=='Hello World!'
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: type(string)

fortran
function strip(self, remove_nulls)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
remove_nullslogicalinoptionalRemove null characters at the end.

Call graph

swapcase

Return a copy of the string with uppercase characters converted to lowercase and vice versa.

fortran
 type(string) :: astring
 logical      :: test_passed(1)
 astring = '  Hello World!   '
 test_passed(1) = astring%swapcase()//''=='  hELLO wORLD!   '
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: type(string)

fortran
function swapcase(self)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.

tempname

Return a safe temporary name suitable for temporary file or directories.

fortran
 type(string) :: astring
 character(len=:), allocatable :: tmpname
 logical                       :: test_passed(5)
 tmpname = astring%tempname()
 inquire(file=tmpname, exist=test_passed(1))
 test_passed(1) = .not.test_passed(1)
 tmpname = astring%tempname(is_file=.false.)
 inquire(file=tmpname, exist=test_passed(2))
 test_passed(2) = .not.test_passed(2)
 tmpname = astring%tempname(path='./')
 inquire(file=tmpname, exist=test_passed(3))
 test_passed(3) = .not.test_passed(3)
 astring = 'me-'
 tmpname = astring%tempname()
 inquire(file=tmpname, exist=test_passed(4))
 test_passed(4) = .not.test_passed(4)
 tmpname = astring%tempname(prefix='you-')
 inquire(file=tmpname, exist=test_passed(5))
 test_passed(5) = .not.test_passed(5)
 print '(L1)', all(test_passed)

Returns: character(len=:)

fortran
function tempname(self, is_file, prefix, path)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
is_filelogicalinoptionalTrue if tempname should be used for file (the default).
prefixcharacter(len=*)inoptionalName prefix, otherwise self is used (if allocated).
pathcharacter(len=*)inoptionalPath where file/directory should be used, default ./.

Call graph

to_integer_I1P

Cast string to integer (I1P).

fortran
 use penf
 type(string) :: astring
 integer(I1P) :: integer_
 logical      :: test_passed(1)
 astring = '127'
 integer_ = astring%to_number(kind=1_I1P)
 test_passed(1) = integer_==127_I1P
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: integer(kind=I1P)

fortran
function to_integer_I1P(self, kind) result(to_number)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
kindinteger(kind=I1P)inMold parameter for kind detection.

Call graph

to_integer_I2P

Cast string to integer (I2P).

fortran
 use penf
 type(string) :: astring
 integer(I2P) :: integer_
 logical      :: test_passed(1)
 astring = '127'
 integer_ = astring%to_number(kind=1_I2P)
 test_passed(1) = integer_==127_I2P
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: integer(kind=I2P)

fortran
function to_integer_I2P(self, kind) result(to_number)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
kindinteger(kind=I2P)inMold parameter for kind detection.

Call graph

to_integer_I4P

Cast string to integer (I4P).

fortran
 use penf
 type(string) :: astring
 integer(I4P) :: integer_
 logical      :: test_passed(1)
 astring = '127'
 integer_ = astring%to_number(kind=1_I4P)
 test_passed(1) = integer_==127_I4P
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: integer(kind=I4P)

fortran
function to_integer_I4P(self, kind) result(to_number)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
kindinteger(kind=I4P)inMold parameter for kind detection.

Call graph

to_integer_I8P

Cast string to integer (I8P).

fortran
 use penf
 type(string) :: astring
 integer(I8P) :: integer_
 logical      :: test_passed(1)
 astring = '127'
 integer_ = astring%to_number(kind=1_I8P)
 test_passed(1) = integer_==127_I8P
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: integer(kind=I8P)

fortran
function to_integer_I8P(self, kind) result(to_number)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
kindinteger(kind=I8P)inMold parameter for kind detection.

Call graph

to_real_R4P

Cast string to real (R4P).

fortran
 use penf
 type(string) :: astring
 real(R4P)    :: real_
 logical      :: test_passed(1)
 astring = '3.4e9'
 real_ = astring%to_number(kind=1._R4P)
 test_passed(1) = real_==3.4e9_R4P
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: real(kind=R4P)

fortran
function to_real_R4P(self, kind) result(to_number)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
kindreal(kind=R4P)inMold parameter for kind detection.

Call graph

to_real_R8P

Cast string to real (R8P).

fortran
 use penf
 type(string) :: astring
 real(R8P)    :: real_
 logical      :: test_passed(1)
 astring = '3.4e9'
 real_ = astring%to_number(kind=1._R8P)
 test_passed(1) = real_==3.4e9_R8P
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: real(kind=R8P)

fortran
function to_real_R8P(self, kind) result(to_number)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
kindreal(kind=R8P)inMold parameter for kind detection.

Call graph

to_real_R16P

Cast string to real (R16P).

fortran
 use penf
 type(string) :: astring
 real(R16P)   :: real_
 logical      :: test_passed(1)
 astring = '3.4e9'
 real_ = astring%to_number(kind=1._R16P)
 test_passed(1) = real_==3.4e9_R16P
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: real(kind=R16P)

fortran
function to_real_R16P(self, kind) result(to_number)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
kindreal(kind=R16P)inMold parameter for kind detection.

Call graph

unescape

Unescape double backslashes (or custom escaped character).

fortran
 type(string) :: astring
 logical      :: test_passed(2)
 astring = '^\\s \\d+\\s*'
 test_passed(1) = (astring%unescape(to_unescape='\')//''=='^\s \d+\s*')
 test_passed(2) = (astring%unescape(to_unescape='s')//''=='^\s \\d+\s*')
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: type(string)

fortran
function unescape(self, to_unescape, unesc) result(unescaped)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
to_unescapecharacter(kind=CK, len=1)inCharacter to be unescaped.
unesccharacter(kind=CK, len=*)inoptionalCharacter used to unescape.

unique

Reduce to one (unique) multiple (sequential) occurrences of a substring into a string.

For example the string ' ab-cre-cre-ab' is reduce to 'ab-cre-ab' if the substring is '-cre'. @note Eventual multiple trailing white space are not reduced to one occurrence.

fortran
 type(string) :: astring
 logical      :: test_passed(1)
 astring = '+++ab-++cre-++cre-ab+++++'
 test_passed(1) = astring%unique(substring='+')//''=='+ab-+cre-+cre-ab+'
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: type(string)

fortran
function unique(self, substring) result(uniq)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
substringcharacter(kind=CK, len=*)inoptionalSubstring which multiple occurences must be reduced to one.

Call graph

upper

Return a string with all uppercase characters.

fortran
 type(string) :: astring
 logical      :: test_passed(1)
 astring = 'Hello WorLD!'
 test_passed(1) = astring%upper()//''=='HELLO WORLD!'
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: type(string)

fortran
function upper(self)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.

Call graph

end_with

Return true if a string ends with a specified suffix.

fortran
 type(string) :: astring
 logical      :: test_passed(5)
 astring = 'Hello WorLD!'
 test_passed(1) = astring%end_with(suffix='LD!').eqv..true.
 test_passed(2) = astring%end_with(suffix='lD!').eqv..false.
 test_passed(3) = astring%end_with(suffix='orLD!', start=5).eqv..true.
 test_passed(4) = astring%end_with(suffix='orLD!', start=8, end=12).eqv..true.
 test_passed(5) = astring%end_with(suffix='!').eqv..true.
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function end_with(self, suffix, start, end, ignore_null_eof)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
suffixcharacter(kind=CK, len=*)inSearched suffix.
startintegerinoptionalStart position into the string.
endintegerinoptionalEnd position into the string.
ignore_null_eoflogicalinoptionalIgnore null character at the end of file.

Call graph

is_allocated

Return true if the string is allocated.

fortran
 type(string) :: astring
 logical      :: test_passed(2)
 test_passed(1) = astring%is_allocated().eqv..false.
 astring = 'hello'
 test_passed(2) = astring%is_allocated().eqv..true.
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function is_allocated(self)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.

is_digit

Return true if all characters in the string are digits.

fortran
 type(string) :: astring
 logical      :: test_passed(2)
 astring = '   -1212112.3 '
 test_passed(1) = astring%is_digit().eqv..false.
 astring = '12121123'
 test_passed(2) = astring%is_digit().eqv..true.
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function is_digit(self)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.

is_integer

Return true if the string contains an integer.

The regular expression is \s*[\+\-]?\d+([eE]\+?\d+)?\s*. The parse algorithm is done in stages:

S0S1S2S3S4S5S6
\s*[\+\-]?\d+[eE]\+?\d+\s*

Exit on stages-parsing results in:

S0S1S2S3S4S5S6
FFTFFTT

@note This implementation is courtesy of tomedunn

fortran
 type(string) :: astring
 logical      :: test_passed(6)
 astring = '   -1212112 '
 test_passed(1) = astring%is_integer().eqv..true.
 astring = '   -1212112'
 test_passed(2) = astring%is_integer(allow_spaces=.false.).eqv..false.
 astring = '-1212112   '
 test_passed(3) = astring%is_integer(allow_spaces=.false.).eqv..false.
 astring = '+2e20'
 test_passed(4) = astring%is_integer().eqv..true.
 astring = ' -2E13 '
 test_passed(5) = astring%is_integer().eqv..true.
 astring = ' -2 E13 '
 test_passed(6) = astring%is_integer().eqv..false.
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function is_integer(self, allow_spaces)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
allow_spaceslogicalinoptionalAllow leading-trailing spaces.

Call graph

is_lower

Return true if all characters in the string are lowercase.

fortran
 type(string) :: astring
 logical      :: test_passed(3)
 astring = ' Hello World'
 test_passed(1) = astring%is_lower().eqv..false.
 astring = ' HELLO WORLD'
 test_passed(2) = astring%is_lower().eqv..false.
 astring = ' hello world'
 test_passed(3) = astring%is_lower().eqv..true.
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function is_lower(self)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.

is_number

Return true if the string contains a number (real or integer).

fortran
 type(string) :: astring
 logical      :: test_passed(7)
 astring = '   -1212112 '
 test_passed(1) = astring%is_number().eqv..true.
 astring = '   -121.2112 '
 test_passed(2) = astring%is_number().eqv..true.
 astring = '   -1212112'
 test_passed(3) = astring%is_number(allow_spaces=.false.).eqv..false.
 astring = '-12121.12   '
 test_passed(4) = astring%is_number(allow_spaces=.false.).eqv..false.
 astring = '+2e20'
 test_passed(5) = astring%is_number().eqv..true.
 astring = ' -2.4E13 '
 test_passed(6) = astring%is_number().eqv..true.
 astring = ' -2 E13 '
 test_passed(7) = astring%is_number().eqv..false.
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function is_number(self, allow_spaces)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
allow_spaceslogicalinoptionalAllow leading-trailing spaces.

Call graph

is_real

Return true if the string contains a real.

The regular expression is \s*[\+\-]?\d*(|\.?\d*([deDE][\+\-]?\d+)?)\s*. The parse algorithm is done in stages:

S0S1S2S3S4S5S6S7S8
\s*[\+\-]?\d*\.?\d*[deDE][\+\-]?\d*\s*

Exit on stages-parsing results in:

S0S1S2S3S4S5S6S7S8

@note This implementation is courtesy of tomedunn

fortran
 type(string) :: astring
 logical      :: test_passed(6)
 astring = '   -1212112.d0 '
 test_passed(1) = astring%is_real().eqv..true.
 astring = '   -1212112.d0'
 test_passed(2) = astring%is_real(allow_spaces=.false.).eqv..false.
 astring = '-1212112.d0   '
 test_passed(3) = astring%is_real(allow_spaces=.false.).eqv..false.
 astring = '+2.e20'
 test_passed(4) = astring%is_real().eqv..true.
 astring = ' -2.01E13 '
 test_passed(5) = astring%is_real().eqv..true.
 astring = ' -2.01 E13 '
 test_passed(6) = astring%is_real().eqv..false.
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function is_real(self, allow_spaces)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
allow_spaceslogicalinoptionalAllow leading-trailing spaces.

Call graph

is_upper

Return true if all characters in the string are uppercase.

fortran
 type(string) :: astring
 logical      :: test_passed(3)
 astring = ' Hello World'
 test_passed(1) = astring%is_upper().eqv..false.
 astring = ' HELLO WORLD'
 test_passed(2) = astring%is_upper().eqv..true.
 astring = ' hello world'
 test_passed(3) = astring%is_upper().eqv..false.
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function is_upper(self)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.

start_with

Return true if a string starts with a specified prefix.

fortran
 type(string) :: astring
 logical      :: test_passed(4)
 astring = 'Hello WorLD!'
 test_passed(1) = astring%start_with(prefix='Hello').eqv..true.
 test_passed(2) = astring%start_with(prefix='hell').eqv..false.
 test_passed(3) = astring%start_with(prefix='llo Wor', start=3).eqv..true.
 test_passed(4) = astring%start_with(prefix='lo W', start=4, end=7).eqv..true.
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function start_with(self, prefix, start, end)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
prefixcharacter(kind=CK, len=*)inSearched prefix.
startintegerinoptionalStart position into the string.
endintegerinoptionalEnd position into the string.

Call graph

string_concat_string

Concatenation with string.

fortran
 type(string) :: astring
 type(string) :: anotherstring
 logical      :: test_passed(1)
 astring = 'Hello '
 anotherstring = 'Bye bye'
 test_passed(1) = astring//anotherstring=='Hello Bye bye'
 print '(L1)', all(test_passed)

Attributes: pure

Returns: character(kind=CK, len=:)

fortran
function string_concat_string(lhs, rhs) result(concat)

Arguments

NameTypeIntentAttributesDescription
lhsclass(string)inLeft hand side.
rhstype(string)inRight hand side.

string_concat_character

Concatenation with character.

fortran
 type(string)                  :: astring
 character(len=:), allocatable :: acharacter
 logical                       :: test_passed(1)
 astring = 'Hello '
 acharacter = 'World!'
 test_passed(1) = astring//acharacter=='Hello World!'
 print '(L1)', all(test_passed)

Attributes: pure

Returns: character(kind=CK, len=:)

fortran
function string_concat_character(lhs, rhs) result(concat)

Arguments

NameTypeIntentAttributesDescription
lhsclass(string)inLeft hand side.
rhscharacter(kind=CK, len=*)inRight hand side.

character_concat_string

Concatenation with character (inverted).

fortran
 type(string)                  :: astring
 character(len=:), allocatable :: acharacter
 logical                       :: test_passed(1)
 astring = 'Hello '
 acharacter = 'World!'
 test_passed(1) = acharacter//astring=='World!Hello '
 print '(L1)', all(test_passed)

Attributes: pure

Returns: character(kind=CK, len=:)

fortran
function character_concat_string(lhs, rhs) result(concat)

Arguments

NameTypeIntentAttributesDescription
lhscharacter(kind=CK, len=*)inLeft hand side.
rhsclass(string)inRight hand side.

string_concat_string_string

Concatenation with string.

fortran
 type(string) :: astring
 type(string) :: anotherstring
 type(string) :: yetanotherstring
 logical      :: test_passed(1)
 astring = 'Hello '
 anotherstring = 'Bye bye'
 yetanotherstring = astring.cat.anotherstring
 test_passed(1) = yetanotherstring%chars()=='Hello Bye bye'
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: type(string)

fortran
function string_concat_string_string(lhs, rhs) result(concat)

Arguments

NameTypeIntentAttributesDescription
lhsclass(string)inLeft hand side.
rhstype(string)inRight hand side.

string_concat_character_string

Concatenation with character.

fortran
 type(string)                  :: astring
 type(string)                  :: yetanotherstring
 character(len=:), allocatable :: acharacter
 logical                       :: test_passed(1)
 astring = 'Hello '
 acharacter = 'World!'
 yetanotherstring = astring.cat.acharacter
 test_passed(1) = yetanotherstring%chars()=='Hello World!'
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: type(string)

fortran
function string_concat_character_string(lhs, rhs) result(concat)

Arguments

NameTypeIntentAttributesDescription
lhsclass(string)inLeft hand side.
rhscharacter(kind=CK, len=*)inRight hand side.

character_concat_string_string

Concatenation with character (inverted).

fortran
 type(string)                  :: astring
 type(string)                  :: yetanotherstring
 character(len=:), allocatable :: acharacter
 logical                       :: test_passed(1)
 astring = 'Hello '
 acharacter = 'World!'
 yetanotherstring = acharacter.cat.astring
 test_passed(1) = yetanotherstring%chars()=='World!Hello '
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: type(string)

fortran
function character_concat_string_string(lhs, rhs) result(concat)

Arguments

NameTypeIntentAttributesDescription
lhscharacter(kind=CK, len=*)inLeft hand side.
rhsclass(string)inRight hand side.

string_eq_string

Equal to string logical operator.

fortran
 type(string) :: astring
 type(string) :: anotherstring
 logical      :: test_passed(2)
 astring = '  one '
 anotherstring = 'two'
 test_passed(1) = ((astring==anotherstring).eqv..false.)
 astring = 'the same '
 anotherstring = 'the same '
 test_passed(2) = ((astring==anotherstring).eqv..true.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function string_eq_string(lhs, rhs) result(is_it)

Arguments

NameTypeIntentAttributesDescription
lhsclass(string)inLeft hand side.
rhstype(string)inRight hand side.

string_eq_character

Equal to character logical operator.

fortran
 type(string)                  :: astring
 character(len=:), allocatable :: acharacter
 logical                       :: test_passed(2)
 astring = '  one '
 acharacter = 'three'
 test_passed(1) = ((astring==acharacter).eqv..false.)
 astring = 'the same '
 acharacter = 'the same '
 test_passed(2) = ((astring==acharacter).eqv..true.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function string_eq_character(lhs, rhs) result(is_it)

Arguments

NameTypeIntentAttributesDescription
lhsclass(string)inLeft hand side.
rhscharacter(kind=CK, len=*)inRight hand side.

character_eq_string

Equal to character (inverted) logical operator.

fortran
 type(string)                  :: astring
 character(len=:), allocatable :: acharacter
 logical                       :: test_passed(2)
 astring = '  one '
 acharacter = 'three'
 test_passed(1) = ((acharacter==astring).eqv..false.)
 astring = 'the same '
 acharacter = 'the same '
 test_passed(2) = ((acharacter==astring).eqv..true.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function character_eq_string(lhs, rhs) result(is_it)

Arguments

NameTypeIntentAttributesDescription
lhscharacter(kind=CK, len=*)inLeft hand side.
rhsclass(string)inRight hand side.

string_ne_string

Not equal to string logical operator.

fortran
 type(string) :: astring
 type(string) :: anotherstring
 logical      :: test_passed(2)
 astring = '  one '
 anotherstring = 'two'
 test_passed(1) = ((astring/=anotherstring).eqv..true.)
 astring = 'the same '
 anotherstring = 'the same '
 test_passed(2) = ((astring/=anotherstring).eqv..false.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function string_ne_string(lhs, rhs) result(is_it)

Arguments

NameTypeIntentAttributesDescription
lhsclass(string)inLeft hand side.
rhstype(string)inRight hand side.

string_ne_character

Not equal to character logical operator.

fortran
 type(string)                  :: astring
 character(len=:), allocatable :: acharacter
 logical                       :: test_passed(2)
 astring = '  one '
 acharacter = 'three'
 test_passed(1) = ((astring/=acharacter).eqv..true.)
 astring = 'the same '
 acharacter = 'the same '
 test_passed(2) = ((astring/=acharacter).eqv..false.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function string_ne_character(lhs, rhs) result(is_it)

Arguments

NameTypeIntentAttributesDescription
lhsclass(string)inLeft hand side.
rhscharacter(kind=CK, len=*)inRight hand side.

character_ne_string

Not equal to character (inverted) logical operator.

fortran
 type(string)                  :: astring
 character(len=:), allocatable :: acharacter
 logical                       :: test_passed(2)
 astring = '  one '
 acharacter = 'three'
 test_passed(1) = ((acharacter/=astring).eqv..true.)
 astring = 'the same '
 acharacter = 'the same '
 test_passed(2) = ((acharacter/=astring).eqv..false.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function character_ne_string(lhs, rhs) result(is_it)

Arguments

NameTypeIntentAttributesDescription
lhscharacter(kind=CK, len=*)inLeft hand side.
rhsclass(string)inRight hand side.

string_lt_string

Lower than to string logical operator.

fortran
 type(string) :: astring
 type(string) :: anotherstring
 logical      :: test_passed(2)
 astring = 'one'
 anotherstring = 'ONE'
 test_passed(1) = ((astring<anotherstring).eqv..false.)
 astring = 'ONE'
 anotherstring = 'one'
 test_passed(2) = ((astring<anotherstring).eqv..true.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function string_lt_string(lhs, rhs) result(is_it)

Arguments

NameTypeIntentAttributesDescription
lhsclass(string)inLeft hand side.
rhstype(string)inRight hand side.

string_lt_character

Lower than to character logical operator.

fortran
 type(string)                  :: astring
 character(len=:), allocatable :: acharacter
 logical                       :: test_passed(2)
 astring = 'one'
 acharacter = 'ONE'
 test_passed(1) = ((astring<acharacter).eqv..false.)
 astring = 'ONE'
 acharacter = 'one'
 test_passed(2) = ((astring<acharacter).eqv..true.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function string_lt_character(lhs, rhs) result(is_it)

Arguments

NameTypeIntentAttributesDescription
lhsclass(string)inLeft hand side.
rhscharacter(kind=CK, len=*)inRight hand side.

character_lt_string

Lower than to character (inverted) logical operator.

fortran
 type(string)                  :: astring
 character(len=:), allocatable :: acharacter
 logical                       :: test_passed(2)
 astring = 'one'
 acharacter = 'ONE'
 test_passed(1) = ((acharacter<astring).eqv..true.)
 astring = 'ONE'
 acharacter = 'one'
 test_passed(2) = ((acharacter<astring).eqv..false.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function character_lt_string(lhs, rhs) result(is_it)

Arguments

NameTypeIntentAttributesDescription
lhscharacter(kind=CK, len=*)inLeft hand side.
rhsclass(string)inRight hand side.

string_le_string

Lower equal than to string logical operator.

fortran
 type(string) :: astring
 type(string) :: anotherstring
 logical      :: test_passed(3)
 astring = 'one'
 anotherstring = 'ONE'
 test_passed(1) = ((astring<=anotherstring).eqv..false.)
 astring = 'ONE'
 anotherstring = 'one'
 test_passed(2) = ((astring<=anotherstring).eqv..true.)
 astring = 'ONE'
 anotherstring = 'ONE'
 test_passed(3) = ((astring<=anotherstring).eqv..true.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function string_le_string(lhs, rhs) result(is_it)

Arguments

NameTypeIntentAttributesDescription
lhsclass(string)inLeft hand side.
rhstype(string)inRight hand side.

string_le_character

Lower equal than to character logical operator.

fortran
 type(string)                  :: astring
 character(len=:), allocatable :: acharacter
 logical                       :: test_passed(3)
 astring = 'one'
 acharacter = 'ONE'
 test_passed(1) = ((astring<=acharacter).eqv..false.)
 astring = 'ONE'
 acharacter = 'one'
 test_passed(2) = ((astring<=acharacter).eqv..true.)
 astring = 'ONE'
 acharacter = 'ONE'
 test_passed(3) = ((astring<=acharacter).eqv..true.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function string_le_character(lhs, rhs) result(is_it)

Arguments

NameTypeIntentAttributesDescription
lhsclass(string)inLeft hand side.
rhscharacter(kind=CK, len=*)inRight hand side.

character_le_string

Lower equal than to character (inverted) logical operator.

fortran
 type(string)                  :: astring
 character(len=:), allocatable :: acharacter
 logical                       :: test_passed(3)
 astring = 'one'
 acharacter = 'ONE'
 test_passed(1) = ((acharacter<=astring).eqv..true.)
 astring = 'ONE'
 acharacter = 'one'
 test_passed(2) = ((acharacter<=astring).eqv..false.)
 astring = 'ONE'
 acharacter = 'ONE'
 test_passed(3) = ((acharacter<=astring).eqv..true.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function character_le_string(lhs, rhs) result(is_it)

Arguments

NameTypeIntentAttributesDescription
lhscharacter(kind=CK, len=*)inLeft hand side.
rhsclass(string)inRight hand side.

string_ge_string

Greater equal than to string logical operator.

fortran
 type(string) :: astring
 type(string) :: anotherstring
 logical      :: test_passed(3)
 astring = 'one'
 anotherstring = 'ONE'
 test_passed(1) = ((astring>=anotherstring).eqv..true.)
 astring = 'ONE'
 anotherstring = 'one'
 test_passed(2) = ((astring>=anotherstring).eqv..false.)
 astring = 'ONE'
 anotherstring = 'ONE'
 test_passed(3) = ((astring>=anotherstring).eqv..true.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function string_ge_string(lhs, rhs) result(is_it)

Arguments

NameTypeIntentAttributesDescription
lhsclass(string)inLeft hand side.
rhstype(string)inRight hand side.

string_ge_character

Greater equal than to character logical operator.

fortran
 type(string)                  :: astring
 character(len=:), allocatable :: acharacter
 logical                       :: test_passed(3)
 astring = 'one'
 acharacter = 'ONE'
 test_passed(1) = ((astring>=acharacter).eqv..true.)
 astring = 'ONE'
 acharacter = 'one'
 test_passed(2) = ((astring>=acharacter).eqv..false.)
 astring = 'ONE'
 acharacter = 'ONE'
 test_passed(3) = ((astring>=acharacter).eqv..true.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function string_ge_character(lhs, rhs) result(is_it)

Arguments

NameTypeIntentAttributesDescription
lhsclass(string)inLeft hand side.
rhscharacter(kind=CK, len=*)inRight hand side.

character_ge_string

Greater equal than to character (inverted) logical operator.

fortran
 type(string)                  :: astring
 character(len=:), allocatable :: acharacter
 logical                       :: test_passed(3)
 astring = 'one'
 acharacter = 'ONE'
 test_passed(1) = ((acharacter>=astring).eqv..false.)
 astring = 'ONE'
 acharacter = 'one'
 test_passed(2) = ((acharacter>=astring).eqv..true.)
 astring = 'ONE'
 acharacter = 'ONE'
 test_passed(3) = ((acharacter>=astring).eqv..true.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function character_ge_string(lhs, rhs) result(is_it)

Arguments

NameTypeIntentAttributesDescription
lhscharacter(kind=CK, len=*)inLeft hand side.
rhsclass(string)inRight hand side.

string_gt_string

Greater than to string logical operator.

fortran
 type(string) :: astring
 type(string) :: anotherstring
 logical      :: test_passed(2)
 astring = 'one'
 anotherstring = 'ONE'
 test_passed(1) = ((astring>anotherstring).eqv..true.)
 astring = 'ONE'
 anotherstring = 'one'
 test_passed(2) = ((astring>anotherstring).eqv..false.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function string_gt_string(lhs, rhs) result(is_it)

Arguments

NameTypeIntentAttributesDescription
lhsclass(string)inLeft hand side.
rhstype(string)inRight hand side.

string_gt_character

Greater than to character logical operator.

fortran
 type(string)                  :: astring
 character(len=:), allocatable :: acharacter
 logical                       :: test_passed(2)
 astring = 'one'
 acharacter = 'ONE'
 test_passed(1) = ((astring>acharacter).eqv..true.)
 astring = 'ONE'
 acharacter = 'one'
 test_passed(2) = ((astring>acharacter).eqv..false.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function string_gt_character(lhs, rhs) result(is_it)

Arguments

NameTypeIntentAttributesDescription
lhsclass(string)inLeft hand side.
rhscharacter(kind=CK, len=*)inRight hand side.

character_gt_string

Greater than to character (inverted) logical operator.

fortran
 type(string)                  :: astring
 character(len=:), allocatable :: acharacter
 logical                       :: test_passed(2)
 astring = 'one'
 acharacter = 'ONE'
 test_passed(1) = ((acharacter>astring).eqv..false.)
 astring = 'ONE'
 acharacter = 'one'
 test_passed(2) = ((acharacter>astring).eqv..true.)
 print '(L1)', all(test_passed)

Attributes: elemental

Returns: logical

fortran
function character_gt_string(lhs, rhs) result(is_it)

Arguments

NameTypeIntentAttributesDescription
lhscharacter(kind=CK, len=*)inLeft hand side.
rhsclass(string)inRight hand side.

replace_one_occurrence

Return a string with the first occurrence of substring old replaced by new.

@note The doctest is not necessary, this being tested by replace.

Attributes: elemental

Returns: type(string)

fortran
function replace_one_occurrence(self, old, new) result(replaced)

Arguments

NameTypeIntentAttributesDescription
selfclass(string)inThe string.
oldcharacter(kind=CK, len=*)inOld substring.
newcharacter(kind=CK, len=*)inNew substring.

Call graph