2016-07-11 10 views
0

Ich bin neu in Fortran und habe eine Frage bezüglich Lese/Schreib-append in Fortran (?):Anfügen Spalten in der Datei

Ich habe 2 Dateien: File1.DAT (ASCII), die 4 Spalten enthält:

1 10 1 5 
2 20 5 8 
3 30 76 8 
... 

File2.DAT (ASCII), die 2 Spalten enthält:

22 18 
18 1 
3 7 
8 74 
... 

Jetzt möchte ich eine neue Datei erstellen und die Spalten der Datei 2 rechts von den Spalten der Datei 1 (Anmerkung anfügen, dass die Anzahl der Zeilen kann unterschiedlich sein)

File3.dat (ASCII)

1 10 1 5 22 18 
2 20 5 8 18 1 
3 30 76 8 3 7 
       8 74 
... 

ich, dass mit dem OPEN READ zu tun versucht, und WRITE-Befehl, der mit 1 Datei gearbeitet, aber als ich versuchte, zu verwenden, 2 Dateien gleichzeitig zu lesen, es hat nicht funktioniert.

Gibt es in Fortran einen Befehl, Spalten an Dateien anzuhängen?


Das Problem ist, dass meine 2 Dateien sicher unterschiedliche Anzahl von Zeilen haben werden. Wenn ich meine Schleife laufen (in meinem Beispiel) 3-mal, alles funktioniert gut, wenn ich die Schleife öfter laufen lasse, erhalte ich einen Fehler:

list in: end of file 
apparent state: unit 15 named File1.dat 
last Format: list io 
lately reading direct formatted external 10 

Hier ist mein Code:

program addColumn 
implicit none 
real*4 a,b,c,d,e,f 
integer*2 i 

open (20, file='File3.dat', status='replace') 
do i = 1, 3 
    open(15, file='File1.dat') 
    open(16, file='File2.dat') 
    read(15, *) a,b,c,d 
    read(16, *) e,f 
    write (20,*) "row", i,": ", a , b ,c ,d ,e ,f 
    print *,  "row", i,": ", a , b ,c ,d ,e ,f 
end do 
close(15) 
close(16) 
close(20) 
end 
+1

Bitte zeigen Sie Ihren Code. –

+1

Verwenden Sie nicht "es hat nicht funktioniert" in Fragen. Nicht hier und nirgendwo sonst. Es sagt uns nichts Nützliches. Haben Sie eine Fehlermeldung erhalten? Welche Nachricht? War das Ergebnis falsch? In welcher Weise war es falsch? –

Antwort

0

Es Es gibt keine Einschränkungen, die das gleichzeitige Lesen mehrerer Dateien verhindern können. Wahrscheinlich müssen Sie auf Dateideskriptoren achten - sie sollten für alle Dateien unterschiedlich sein, mit denen Sie arbeiten werden. Betrachten Sie folgendes Beispiel, es liest aus zwei Textdateien und schreibt gleichzeitig in die dritte.

program append_columns 

    use, intrinsic :: iso_fortran_env, only: iostat_end 
    implicit none 

    character(len=256) string1, string2 
    character(len=16) format 

    integer unit1, unit2, unit3 
    integer status1, status2 
    integer index, length 

    open(newunit = unit1, file = 'column_file_1.txt', status = 'old', action = 'read') 
    open(newunit = unit2, file = 'column_file_2.txt', status = 'old', action = 'read') 
    open(newunit = unit3, file = 'column_file_result.txt', status = 'replace', action = 'write') 
    do 
     read(unit1, '(a)', iostat = status1) string1 
     read(unit2, '(a)', iostat = status2) string2 
     if ((status1 == iostat_end) .and. (status2 == iostat_end)) then 
      exit 
     end if 

     if ((status1 > 0) .or. (status2 > 0)) then 
      error stop 'Could not read a file.' 
     end if 

     !... some lines removed 
     write(unit3, format) trim(string1), trim(string2) 

     !... some lines removed 
    end do 

    close(unit1) 
    close(unit2) 
    close(unit3) 
end