Fortran中按指定格式写入数组元素至文件:k列写法问询
Fortran数组写入文件:k列的处理方案
你只需要在外层循环的每次迭代中,用k(i)获取当前的k值即可——外层循环的i恰好对应k数组的索引,内层循环遍历kp的所有元素时,k的取值固定为k(i),完全匹配你需要的输出格式。
另外,原代码使用的自由格式*会导致输出列不对齐,建议改用格式化输出语句来保证列间距和示例一致,修正后的完整代码如下:
program write_arrays implicit none integer :: k(2), kp(2), w(2,2) integer :: i, j, unit_num ! 初始化数组 k = [1, 2] kp = [1, 2] w = reshape([1,2,3,4], [2,2]) ! 按列存储,对应w(1,1)=1, w(1,2)=2, w(2,1)=3, w(2,2)=4 ! 打开文件(自动分配可用单元号,不存在则创建,存在则覆盖) open(newunit=unit_num, file='output.txt', status='replace', action='write') ! 写入表头,用格式化输出保证对齐 write(unit_num, '(A5,A5,A10)') "k", "kp", "w(k,kp)" write(unit_num, *) ! 写入空行分隔表头和数据 ! 嵌套循环写入数据 do i = 1, 2 do j = 1, 2 ! 用I5格式符,每个整数占5个字符宽度,确保列对齐 write(unit_num, '(I5,I5,I5)') k(i), kp(j), w(i,j) end do end do ! 关闭文件 close(unit_num) end program write_arrays
关键说明:
k(i):外层循环i遍历k数组的每个元素,内层循环遍历kp时,k值保持为k(i),正好输出你需要的1,1,2,2序列。reshape:将一维数组转为二维数组,Fortran默认按列存储,所以reshape([1,2,3,4], [2,2])会生成你需要的二维数组w。- 格式化输出
(I5,I5,I5):每个整数占5个字符宽度,确保列对齐;表头用(A5,A5,A10)调整宽度,让表头和数据列对应。
内容的提问来源于stack exchange,提问作者Tommy
相关产品推荐
相关产品推荐

