Fortran runtime error: End of file
Publicado por Hector Barreno (2 intervenciones) el 22/01/2018 18:19:23
Hola Buenas, estoy haciendo un programa para calcular una serie de notas a través de lectura de archivos.
Por un lado tengo un archivo csv con todas las soluciones correctas, por otro tengo un archivo txt con las respuestas de cada alumno. El código que yo he puesto me debería calcular solamente la nota del primer alumno, pero me da el error: end of file. Si alguien puede ayudarme a resolverlo se lo agradecería mucho, gracias. PD: el archivo csv tengo que leerlo por filas, mientras que el txt por columnas.
Este es el código que he puesto:
Por un lado tengo un archivo csv con todas las soluciones correctas, por otro tengo un archivo txt con las respuestas de cada alumno. El código que yo he puesto me debería calcular solamente la nota del primer alumno, pero me da el error: end of file. Si alguien puede ayudarme a resolverlo se lo agradecería mucho, gracias. PD: el archivo csv tengo que leerlo por filas, mientras que el txt por columnas.
Este es el código que he puesto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Program trabajo
implicit none
character( len = 7 ) :: R !"len" indica el numero de caracteres, es decir el numero de columnas
character( len = 3 ) :: exp1, exp2
character( len = 8 ) :: S, DNI
integer :: udata1, udata2, EoF, N, k
character( len = 500 ) line
real :: A, X, Y, Z, expX, expA
open( file = 'solutions.csv', newunit = udata1 )
open( file = 'p1_T7.txt', newunit = udata2 )
read( unit = udata2, iostat = EoF, fmt = '( A )' ) line !por cada read que pongas lee una fila
DNI = line( 1 : 8 )
N = 10
do k = 1, 10
R = line( 31 + k*10 : 37 + k*10 ) !conversion de texto a numeros
read( R,* ) X
exp2 = line( 38 + k*10 : 40 + k*10 )
read( exp2,* ) expX
Z = X*( 10**expX )
read( unit = udata1, iostat = EoF, fmt = '( A )' ) line
S = line( 18 : 25 ) !conversion de caracteres a numeros
read( S,* ) A
exp1 = line( 27 : 29 )
read( exp1,* ) expA
Y = ( A*( 10**expA ) )*( 10**5 )
if ( Y == Z ) then
N = N
else
N = N - 1
end if
end do
write( *,* ) DNI
write( *,* ) N
end program
Valora esta pregunta


1