如何将读取类Fortran格式文本的Fortran代码转换为Julia代码?
Fortran转Julia:读取类Fortran格式文本文件
以下是对应你提供的Fortran代码的Julia实现,两种方式可选,均适配自由格式的文本文件读取:
方式一:用readdlm批量读取(简洁高效)
using DelimitedFiles # 初始化与Fortran尺寸一致的数组 x = zeros(10) a = zeros(10) k = zeros(Int, 10, 2) # 读取整个文件的自由格式数据 data = readdlm("t.txt") # 提取第一行的n和ne n, ne = Int(data[1,1]), Int(data[1,2]) # 处理n行x数组赋值(对应Fortran第一个循环) for i in 1:n m = Int(data[i+1, 1]) x[m] = data[i+1, 2] end # 处理ne行a和k数组赋值(对应Fortran第二个循环) for i in 1:ne row_idx = n + 1 + i m = Int(data[row_idx, 1]) a[m] = data[row_idx, 2] k[m, 1] = Int(data[row_idx, 3]) k[m, 2] = Int(data[row_idx, 4]) end
方式二:用readline逐行读取(适合大文件或逐行控制场景)
# 初始化与Fortran尺寸一致的数组 x = zeros(10) a = zeros(10) k = zeros(Int, 10, 2) open("t.txt", "r") do io # 读取并解析第一行 first_line = split(readline(io)) n = parse(Int, first_line[1]) ne = parse(Int, first_line[2]) # 循环读取n行,赋值x数组 for _ in 1:n parts = split(readline(io)) m = parse(Int, parts[1]) x[m] = parse(Float64, parts[2]) end # 循环读取ne行,赋值a和k数组 for _ in 1:ne parts = split(readline(io)) m = parse(Int, parts[1]) a[m] = parse(Float64, parts[2]) k[m, 1] = parse(Int, parts[3]) k[m, 2] = parse(Int, parts[4]) end end
说明
- Julia默认采用1-based索引,与Fortran完全一致,因此可以直接沿用原代码中的下标逻辑
- 两种方式均支持自由格式的文本分割(任意数量空格分隔),与Fortran的
READ(*,*)行为一致 - 测试用的
t.txt内容如下:
4 3 2 4.1 3 2.2 4 7.1 1 1.1 2 3.3 1 4 3 4.4 2 4 1 7.7 1 2
内容的提问来源于stack exchange,提问作者computationalMechanics
相关产品推荐
相关产品推荐

