Как записать вывод 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)
конечно, это работает только в том случае, если ваши данные числовые или легко воспроизводимые. Вы можете оставить форматирование в программе электронных таблиц или быть более конкретна.
вот что я использую (работает с 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 " в порядке).