如何在Fortran程序中输出10列8行格式的数据集至新TXT文件?
问题分析与解决方案
原代码存在几个关键问题导致输出格式不符合要求:
- 数组维度与数据规模不匹配(若原数据是10列80行,数组应定义为
(10,80);若目标是输出10列8行,数组则对应(10,8)) - 写入循环逻辑错误:循环80次每次写入整个数组,会重复输出80遍完整数据
- 未指定输出格式,导致数据无规则连续排列
修正后的代码示例
场景1:原数据为10列80行,输出保持10列80行
program test implicit none integer::i ! Fortran数组按(列数, 行数)定义,对应10列80行的数据集 real,dimension(10,80)::data ! 打开输入文件,status='old'确保文件已存在 open(unit=7, file='C:\USERS\SAM\DOCUMENTS\FORTRAN\DATA.TXT', status='old') ! 一次性读取所有数据到数组 read(7, *) data close(7) ! 读取完成后关闭文件 ! 打开输出文件,status='replace'覆盖已有文件 open(unit=8, file='C:\USERS\SAM\DOCUMENTS\FORTRAN\TESTDATA.TXT', status='replace') ! 循环遍历每一行,每行输出10个元素(10列) do i = 1, 80 ! '(10F10.4)'表示每行输出10个浮点数,每个占10位宽度、保留4位小数(可按需调整) write(8, '(10F10.4)') data(:, i) end do close(8) ! 写入完成后关闭文件 end program test
场景2:原数据为80个元素,输出按10列8行排列
如果原数据是80个连续元素,需要整理为10列8行格式输出,调整数组维度和循环次数即可:
program test implicit none integer::i real,dimension(10,8)::data open(unit=7, file='C:\USERS\SAM\DOCUMENTS\FORTRAN\DATA.TXT', status='old') read(7, *) data close(7) open(unit=8, file='C:\USERS\SAM\DOCUMENTS\FORTRAN\TESTDATA.TXT', status='replace') do i = 1, 8 write(8, '(10F10.4)') data(:, i) end do close(8) end program test
关键说明
- 数组维度逻辑:Fortran采用列主序存储,
dimension(列数, 行数)的定义方式更贴合行列展示逻辑 - 输出格式控制:格式化字符串
(10F10.4)是实现列对齐的核心,可根据数据精度调整参数,比如F8.2表示占8位宽度、保留2位小数 - 文件操作规范:读写完成后及时关闭文件,使用
status参数能避免文件异常 - 循环逻辑:循环遍历数组的行索引,每次输出该行的所有列元素,确保每行严格对应10列数据
内容的提问来源于stack exchange,提问作者Sujeewa
相关产品推荐
相关产品推荐

