2016-10-29 3 views
0

私はこの.txtファイルは、データを読むことができるように見えるものは何ですか?

4 4 4 !DIM_M, DIM_L, DIM_N 
1 2 3 4 
5 6 7 8 
9 10 11 12 
13 14 15 16 
1 2 3 4 
5 6 7 8 
9 10 11 12 
13 14 15 16 
2 20 !DIM_START, DIM_END 

のように見える。しかしポイントはすなわち

、私は今、私が使用して行列の名前のようないくつかのコメントを追加した場合、その後、私は若干の誤差が出るということである.txtファイルを作成
4 4 4 !DIM_M, DIM_L, DIM_N 
1 2 3 4 !A 
5 6 7 8 
9 10 11 12 
13 14 15 16 
1 2 3 4 !B 
5 6 7 8 
9 10 11 12 
13 14 15 16 
2 20 !DIM_START, DIM_END 

これ以上動作しません。私は.txtファイルを読み取るために使用Fortranのファイルは、私は、ファイルを読み込む場合、私がチェックするすべての部品が(IOSTATを使用して)働いて左

! OPEN FILE 
    OPEN(UNIT=39, STATUS='OLD', ACTION='READ',FILE='input.txt',IOSTAT=IERROR) 
    !READ DIMENSIONS + CHECK IF SUCCESFUL 
    READ(39,*,IOSTAT=IERROR)DIM_M, DIM_L, DIM_N 
    ALLOCATE(A(DIM_M,DIM_L),B(DIM_L,DIM_N), C(DIM_M,DIM_N), STAT=IERROR) 
    READ (39,*, IOSTAT=IERROR)A 
    READ (39,*, IOSTAT=IERROR)B 
    READ (39,*) DIM_START, DIM_END 
    CLOSE(UNIT=39) 

です。どのように私はこれを変更することができる任意のアイデア?

+0

それらを読んで、あなたは本当に特定のエラーをリストする必要があり、私たちはあなたの画面を読むことができません。 –

+0

Fortranのすべての質問について、tag [tag:fortran]を使用してください。 –

+0

は本当に必要なコメントですか?ご存じのように、コメント処理は、きれいでシンプルなコードに複雑さを追加します。 – agentp

答えて

0

文字列として読み込んだ後、文字列の一部を「!」まで使用します。変数を読み込む。

非コンパイルの例を提出したので、私は親切に対応します。あなたは*「いくつかのエラー」*とはどういう意味ですか

! OPEN FILE 
CHARACTER(LEN=132) :: ALine 
CHARACTER(LEN=1), PARAMETER :: Bang '!' 
OPEN(UNIT=39, STATUS='OLD', ACTION='READ',FILE='input.txt',IOSTAT=IERROR) 
!READ DIMENSIONS + CHECK IF SUCCESsFUL 
READ(39,*,IOSTAT=IERROR) ALine 
IF(INDEX(ALine,bang) > 0) THEN 
    READ(ALine(1:INDEX(ALine,'!')-1) ,*,IOSTAT=IERROR) DIM_M, DIM_L, DIM_N 
ELSE 
    READ(ALine ,*,IOSTAT=IERROR) DIM_M, DIM_L, DIM_N 
ENDIF 
ALLOCATE(A(DIM_M,DIM_L),B(DIM_L,DIM_N), C(DIM_M,DIM_N), STAT=IERROR) 
!Etc 
+1

リスト形式の書式設定を使用して、一般的なテキストの行を読み取ることはできません。 – IanH

+0

私は仕事場でこれをかなり定期的にチェックする必要があります。私は通常、カンマと引用符を検索し、文字列を一口の大きさに分割しているので、おそらく正しいでしょう。私は1年に2回それを行う必要があるので、私は図書館にすべてを入れました。 – Holmz

0

DIM_MそれぞれDIM_L番号が1行に常に存在している場合は、単にループに

do l = 1, dim_l 
    read(39,*,iostat=ierror) A(:,l) 
    if (ierror /= 0) do something 
end do 

do n = 1, dim_n 
    read(39,*,iostat=ierror) A(:,n) 
    if (ierror /= 0) do something 
end do 
関連する問題