Fortran - 只包含指定字符的字符串

时间:2015-12-03 19:13:48

标签: database string fortran character

我正在进行的Fortran项目需要扫描数据库并存储仅包含由引用字符串指定的字符的字符串。

例如,假设我有一个参考字符串" A11。"数据库包含几个数据,其中一些包含引用中的所有字符,一些不包含,下面的集合就是这样的一个例子:

" A111,
" A211"
" B11"
" 1AA1"

在这种情况下,程序只会拉出" A111,"和" 1AA1,"因为其他字符串包含的字符不在引用字符串" A11。"

我尝试使用此代码的变体,但它似乎不起作用。任何帮助将不胜感激。

 program main
 implicit none
 integer :: iostatus, i
 character*6, dimension(:), allocatable :: mystr_temp
 character*6 :: refstr
 open(unit=2,file='file.txt')
 iostatus = 1
 i = 1
 refstr = 'Ref'
 mystr(1) = ''
 do while (iostatus > 0)
      do while (any(mystr(i)) /= any(refstr))
           read(2,'(A6)', iostat = iostatus) mystr(i)
      end do
      i = i + 1
 end do
 end program main

1 个答案:

答案 0 :(得分:1)

我们可以使用verify(str1,str2)执行此操作,该See demo.会返回program_bstr1中不存在的str2中第一个字符的位置。如果在str1中找到str2中的所有字符,则该函数返回0。所以我修改了代码

program main
    implicit none
    integer :: ios, i
    character(6) :: mystr(100), refstr, stmp
    open(unit=2,file='file.txt')

    i = 0
    refstr = 'A11'
    do
        read(2, '(a6)', iostat=ios) stmp
        if ( ios /= 0 ) exit
        if ( verify( stmp, refstr ) == 0 ) then
            i = i + 1
            mystr(i) = stmp
            print *, i, ":", mystr(i)
        endif
    enddo
end program

给出了问题中的样本数据

       1 :A111
       2 :1AA1