2013-10-15 2 views
3

Я использую fortran f95. Моя ОС - это Windows 7, 64-разрядная.Получить из fortran в файл excel fortran (ftn95)

Я хотел бы получить вывод в файл excel, чтобы я мог строить данные. Кто-нибудь знает, как это сделать? Ваш ответ высоко оценен. PS: Я хотел бы, чтобы выходной файл содержал x, f (i), fprime1, fprime2, fprime3, diff1, diff2 и diff3. Код, как указано ниже:

**

! This program calculates the first derivative of 
! a function, where f(x)= sin x. It makes use of the 
! centred-difference formula using 3 values of the step size: h1, h2, h3. 
! It also calculates the 
! analytical first derivative of the function. 
Program centred_difference_first_derivative 
implicit none 
real :: x, h1, h2, h3, fprime1, fprime2, fprime3, diff1, diff2, diff3, pi, stepa 
real,dimension(:), allocatable :: f 
integer :: i 
! Assignment of variables 
x=0.0 
pi=4*atan2(1.0,1.0) 
allocate(f(41)) 
stepa=pi/20.0 
h1=0.1 
h2=0.01 
h3=0.001 
! Calculate analytical derivative of sin x 
! for the domain x:[0,2pi] 
do i=1,41 
    f(i)=cos(x) 
    x=x+stepa 
    end do 

! Approximates first derivative of sin x 
! step size h1, for the domain x:[0,2pi] 
    x=0.0 
do i=1,41 
    fprime1=(sin(x+h1)-sin(x-h1))/(2*h1) 
    diff1=f(i)-fprime1 
    print 37, x,f(i),fprime1,diff1 
    x=x+stepa 
    end do 
37 format(e15.8,3x,e15.8,3x,e15.8,3x,'ERROR1= ',e15.8) 

! Approximates first derivative of sin x 
! step size h2, for the domain x:[0,2pi] 
    x=0.0 
do i=1,41 
    fprime2=(sin(x+h2)-sin(x-h2))/(2*h2) 
    diff2=f(i)-fprime2 
    print 49,x,f(i),fprime2,diff2  
    x=x+stepa 
    end do 
49 format(e15.8,3x,e15.8,3x,e15.8,3x,'ERROR2= ',e15.8) 
! Approximates first derivative of sin x 
! step size h3, for the domain x:[0,2pi] 
    x=0.0 
do i=1,41 
    fprime3=(sin(x+h3)-sin(x-h3))/(2*h3) 
    diff3=f(i)-fprime3 
print 61,x,f(i),fprime3,diff3  
    x=x+stepa 
    end do 
61 format(e15.8,3x,e15.8,3x,e15.8,3x,'ERROR3= ',e15.8) 
end program 

**

+7

Вы знаете, как использовать инструкцию Fortran 'write'? Если вы это сделаете, используйте его для записи файла 'csv'; Excel будет легко читать такой файл. Если вы не знаете, что инструкция 'write' делает некоторое обучение и возвращается, когда у вас есть код, с которым вам нужна помощь. –

+1

В дополнение к тому, что сказал HPM, есть несколько способов, которыми вы можете это сделать; одним из них был бы вышеупомянутый подход csv. Работает неплохо. Минимальная суета. Если вы думаете о чем-то, что будет постоянно перезагружаться и распечатываться снова и снова, возможно, стоит изучить макрос, который будет читать выходной файл (что бы это ни было) и прочитать его на листе excel. Существуют также библиотеки для написания файлов excel «напрямую», но это был бы самый сложный подход. – Rook

ответ

1

Выходные ваши данные в файл, разделенных пробелами или запятыми. Excel имеет функции импорта текста для правильной обработки и отображения таких файлов.

Примером являются файлы ASCII tecplot, которые вы можете просто написать с помощью Fortran, с исходным кодом и примерами, представленными here - TECPLOT_WRITE. Далее следует короткий фрагмент.

! 
! Write the zone header. 
! 
    write (iunit, '(a)') ' ' 
    write (iunit, '(a,i6,a,i6,a,i6,a)') 'Zone I=', nr, ', J=', nz, 'K=', & 
    nt, ', F=POINT' 
! 
! Write the zone data, one node at a time. 
! 
    do k = 1, nt 
    do j = 1, nz 
     do i = 1, nr 

     x = r(i) * cos (t(k)) 
     y = r(i) * sin (t(k)) 

     vx = vr(i,j) * cos (t(k)) - vt(i,j) * sin (t(k)) 
     vy = vr(i,j) * sin (t(k)) + vt(i,j) * cos (t(k)) 

     write (iunit, '(3f10.3,3g15.6)') x, y, z(j), vx, vy, vz(i,j) 

     end do 
    end do 
    end do 
Смежные вопросы