You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将读取类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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 05:17:08