2016-09-14 52 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

這並不重要。 –

相關問題