2016-07-01 10 views
0

ich eine Datei filenames.dat haben, die Einträge wie folgt enthält:Lesen langer Pfad als String viele vorwärts enthält schlitzt

../Data/physionetdata/patient0006_s0022_lre/s0022lre.dat 
../Data/physionetdata/patient0006_s0027_lre/s0027lre.dat 

Ich möchte diese Einträge lesen unter Verwendung von do-Schleife nacheinander in einer Variablen filename. Also habe ich versucht, dies:

open(unit = 1, file = 'filenames.dat') 

do i = 1, 10 
    read(1,*)filename 
enddo 

jedoch Fortran an dem ersten Schrägstrich beendet (/), die es unmöglich macht, für mich den Dateipfad in einer Variablen filename zu speichern. Wie kann ich den vollständigen Pfad lesen?

+0

Vielleicht nicht Duplikate der folgenden, aber sie sind nützlich: https://stackoverflow.com/q/28539857, http://stackoverflow.com/q/ 27846138. – francescalus

+1

'lesen (1, '(a)') Dateiname' – agentp

+0

@agentp: einfach und elegant. Danke vielmals. Hat funktioniert! – Peaceful

Antwort

0

Verwenden Sie den newunit Spezifizierer in Ihrer open Anweisung, um böse Zusammenstöße zu vermeiden. Das manuelle Einstellen von verbundenen Dateieinheiten ist extrem fehleranfällig und in größeren Programmen schwierig zu warten.

aus der Datei zu lesen:

integer :: u 
    open (newunit=u, file='filenames.dat', status='old') 

    do i = 1,10  
    read (u,'(a)') filenames 
    end do 

    close (u) 
+2

Dies beantwortet die Frage nicht. Das Problem besteht in der Verwendung der listengesteuerten Formatierung und der speziellen Bedeutung von '/' in der Eingabe. Der Code in dieser Antwort hat genau das gleiche Problem. Beachten Sie auch, dass NEWUNIT eine Fortran 2008-Funktion ist. Wenn das OP einen Compiler verwendet, der diese Funktion nicht unterstützt, ist die Verwendung von NEWUNIT einfach keine Option. – IanH

+0

@Snehal Shekatkar 'newunit' wird von Cray, GNU (gfortran), IBM, Intel, NAG und PGI unterstützt. – jlokimlin