Как записать вывод Fortran в виде CSV-файла?

может ли кто-нибудь сказать мне, как я могу написать свой вывод программы Fortran в формате CSV? Поэтому я могу открыть CSV-файл в Excel для построения данных.

4 ответов


Я бы также рекомендовал модуль csv_file из ФЛИБОВ. Fortran хорошо оснащен для чтения csv-файлов, но не столько для их записи. С помощью модуля csv_file вы ставите

    use csv_file

в начале вашей функции/подпрограммы, а затем вызвать его:

    call csv_write(unit, value, advance)

где unit = номер единицы файла, value = массив или скалярное значение, которое вы хотите записать, и advance = .истинный. или. ложный. в зависимости от того, хотите ли вы перейти к следующей строке или не.

пример программы:

  program write_csv

    use csv_file

    implicit none

    integer :: a(3), b(2)

    open(unit=1,file='test.txt',status='unknown')

    a = (/1,2,3/)
    b = (/4,5/)

    call csv_write(1,a,.true.)
    call csv_write(1,b,.true.)

  end program

выход:

1,2,3

4,5

если вы вместо этого просто хотите использовать команду write, я думаю, вы должны сделать это так:

    write(1,'(I1,A,I1,A,I1)') a(1),',',a(2),',',a(3)
    write(1,'(I1,A,I1)') b(1),',',b(2)

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

я настоятельно рекомендую использовать модуль csv_file. Это, конечно, спасло меня от многих часов разочарования.


немного более простой версией оператора write может быть:

write (1, '(1x, F, 3(",", F))') a(1), a(2), a(3), a(4)

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


десятки секунд работы с поисковой системой находит меня ФЛИБОВ библиотека, которая включает в себя модуль под названием csv_file который будет писать строки, скаляры и массивы из формата CSV.


вот что я использую (работает с G95):

write(unit,'(999(G21.6,:,","))')array or data structure containing number or character variables

компилятор Intel распознает

write(unit,'(*(G0.6,:,","))')array or data structure

который не имеет лишних пробелов, и строка может иметь более 999 столбцов.

чтобы удалить лишние пробелы с помощью F95, сначала напишите в буфер символов, а затем используйте свою собственную программу CSV_write, чтобы удалить лишние пробелы, например:

write(Buf,'(999(G21.6,:,","))')array or data structure
call CSV_write(unit,Buf)

вы также можете использовать

write(Buf,*)array or data structure
call CSV_write(unit,Buf)

где ваша программа CSV_write заменяет пробелы с ", " в Buf. Это проблематично в том, что он не разделяет символьные переменные, если нет дополнительных пробелов (т. е. "a", " abc " в порядке).