[英]Extract integers from string in Fortran
我使用的是Fortran90。我有一個聲明為CHARACTER(20) :: Folds
的字符串,該字符串從看起來像x:y:z
的命令行參數中分配其值,其中x,y和z都是整數。 然后,我需要從該字符串中挑選出數字並將其分配給適當的變量。 這是我嘗試這樣做的方式:
i=1
do j=1, LEN_TRIM(folds)
temp_fold=''
if (folds(j).neqv.':') then
temp_fold(j)=folds(j)
elseif (i.eq.1) then
read(temp_fold,*) FoldX
i=i+1
elseif (i.eq.2) then
read(temp_fold,*) FoldY
i=i+1
else
read(temp_fold,*) FoldZ
endif
enddo
當我編譯這個我得到錯誤:
unfolder.f90(222):錯誤#6410:此名稱尚未聲明為數組或函數。 [折]
[stud2 @ feynman vec2ascii] $ if(folds(j).neqv。':')然后語法錯誤在意外標記'j'附近[stud2 @ feynman vec2ascii] $ -------- ^
unfolder.f90(223):錯誤#6410:此名稱尚未聲明為數組或函數。 [TEMP_FOLD]
[stud2 @ feynman vec2ascii] $ temp_fold(j)= folds(j)
意外令牌'j'附近的語法錯誤
如何提取這些數字?
您可以使用index
固有函數在第一個冒號的字符串中定位位置,例如i
。 然后使用內部讀取從前面的子字符串中讀取整數x
: read (string (1:i-1), *) x
。 然后將此過程應用於從i+1
開始的子字符串以獲得y
。 重復z
。
PS是您的錯誤消息來自bash而非Fortran編譯器?
通過folds
一個字符變量,訪問一個子字符串需要一個(.:.)
。 也就是說,要訪問索引為j
的單個字符: folds(j:j)
。
否則,編譯器認為folds
必須是數組(不是)或函數(不是您想要的)。 這是什么意思:
此名稱尚未聲明為數組或函數。
但是在解決您的問題方面,我第二次使用@MSB給出的答案,因為它更優雅。 此外,按原樣循環(在folds
和temp_fold
中都使用(j:j)
校正),您所依賴的每個x,y和z都是一位整數。 這個答案更籠統。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.