簡體   English   中英

從Fortran中的字符串中提取整數

[英]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 然后使用內部讀取從前面的子字符串中讀取整數xread (string (1:i-1), *) x 然后將此過程應用於從i+1開始的子字符串以獲得y 重復z

PS是您的錯誤消息來自bash而非Fortran編譯器?

通過folds一個字符變量,訪問一個子字符串需要一個(.:.) 也就是說,要訪問索引為j的單個字符: folds(j:j)

否則,編譯器認為folds必須是數組(不是)或函數(不是您想要的)。 這是什么意思:

此名稱尚未聲明為數組或函數。

但是在解決您的問題方面,我第二次使用@MSB給出的答案,因為它更優雅。 此外,按原樣循環(在foldstemp_fold中都使用(j:j)校正),您所依賴的每個x,y和z都是一位整數。 這個答案更籠統。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM