2016-09-14 51 views
-2

这是子程序的strlenstrlen实际在做什么?

 subroutine strlen(string,i1,i2) 
     character string*(*) 
     do 10 i=len(string),1,-1 
     if(string(i:i).ne.' ')then 
      i2=i 
      goto 11 
     endif 
    10 continue 
    11 do 20 i=1,len(string) 
     if(string(i:i).ne.' ')then 
      i1=i 
      return 
     endif 
    20 continue 
     return 
     end 

在主

if(nfil.lt.0)then 
    call strlen(cpar,i1,i2) 
    open(unit=10,file=cpar(i1:i2),status='old') 

如果CPAR声明 字符CPAR *(*)

是否存在有关的名称的任何规则或限制cpar将被正确打开?

我的hx263on.sens(cpar)无法读取。为什么?

+0

在主程序中'cpar'将需要超出'cpar *(*)'的声明。你能找到吗? – francescalus

+0

cpar等于“hx263on.sens(cpar)”还是等于“hx263on.sens”或实际上是什么?多久了?你如何试图打印它? –

+0

@VladimirF不,实际上我已命名文件hx263on.sens.I使用此文件作为输入文件,但无法读取它。 –

回答

1

该函数只是查找第一个和最后一个不是空格的字符。这些返回为i1i2cpar(i1:i2)应该与Fortran 90中的adjustl(trim(cpar))相同。

这应该没有必要。无论如何,Fortran修剪传递的文件名。不支持以空格结尾的文件名。

如果文件无法打开,它可能不存在或包含某些操作系统不喜欢的特殊字符。或者它实际上包含比你想象的更多的东西。也许变量太短或类似的东西。通过打印验证cparcpar(i1:i2)的值。

+0

代码是Fortran 77. –

+2

这并不重要。 –

相关问题