我正在进行的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
答案 0 :(得分:1)
我们可以使用verify(str1,str2)执行此操作,该See demo.会返回program_b
中str1
中不存在的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