Ho aperto un file per scrivere un numero. Devo scrivere il numero alla fine del file in modoCome andare alla fine del file?
come arrivare all'ultima riga per scrivere su di esso?
Ho aperto un file per scrivere un numero. Devo scrivere il numero alla fine del file in modoCome andare alla fine del file?
come arrivare all'ultima riga per scrivere su di esso?
Si dovrebbe aprire il file con
open(..., position="append",...)
In alternativa, si può chiedere per la dimensione del file
inquire(...,size=some_integer_variable,...)
quindi se il file è un file di accesso diretto, è possibile utilizzare questo formato per calcolare il numero di record del record finale. In alternativa, se la modalità di accesso è "stream", è possibile utilizzare
write(..., pos=some_integer_variable)
di scrivere a partire dalla fine del file.
Ho usato lo stesso trucco per anni e sarei interessato a un modo più elegante, ma posso proporvi il seguente metodo. Si noti che è sempre meno efficiente in quanto il file aumenta di numero di righe. Si noti inoltre che questa parte di codice potrebbe finire in un elegante modulo dedicato alla riproduzione con input/output.
aprire il file
open(11, file='monfichier')
Calcola quante linee ci sono nel file
nbline = 0 ! should have been declared as an integer
do while(.true.)
read(11,*,iostat=ios) ! ios should have been declared as an integer
if(ios > 0) then
stop 'problem somewhere'
else if(ios < 0) then ! end of file is reached
exit
else
nbline = nbline + 1
end if
end do
close(11)
in questa fase, si ha il numero totale di linee memorizzate nel nbline variabile. Se si desidera stampare qualcosa alla linea ennesimo prima dell'ultima riga, quindi
open(11, file='monfichier')
do i = 1, nbline - N ! see my nota bene at the end of my answer; i and N are integers
read(11,*)
end do
write(11,*)'hello world'
Et voilà!
N.B. : Si prega di prestare attenzione nel modo in cui si conta per nbline-N o nbline- (N-1), a seconda esattamente di ciò che si desidera.
Perché dovresti usare questo metodo quando 'position = 'append'' soddisfa i requisiti dell'OP? Questo ha qualche vantaggio rispetto all'approccio diretto? –
@HighPerformanceMark - L'unica cosa che posso pensare è che questo può essere fatto per compilare con un compilatore f77 (antico) severo (con un piccolo aggiustamento - es. Rimuovi 'do while' a favore di etichette di istruzioni, goto e if [yikes!]) considerando che 'position = 'append'' non è stato aggiunto fino a più tardi (non sono sicuro esattamente quanto tempo dopo). – mgilson
@mgilson in effetti ... Una domanda però: non è questo metodo più generico in quanto è possibile scrivere in qualsiasi luogo desiderato, ad es. alla penultima riga. Puoi farlo usando 'position ='? – max
PROGRAMMA esempio IMPLICIT NONE INTEGER :: Ierr
OPEN (UNIT = 13, FILE = "ex.dat") CALL FSEEK (13, 0, 2, Ierr) ! Fare quello che vuoi ALLORA
CLOSE (13) esempio FINE PROGRAMMA
la chiamata a fseek va alla fine del file (utilizzato come quella, controllare l'utilizzo della http://docs.oracle.com/cd/E19957-01/805-4942/6j4m3r8ti/index.html)
D: Il FORTRAN l'implementazione ha "fseek()"? O puoi semplicemente APRIRE in modalità "APPEND"? – paulsm4