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

如何在Julia中读取空白行分隔的二维数组块并生成数组的数组

问题原因
  • 作用域冲突:do块内部重新定义的aux是局部变量,不会修改外部全局的aux,且do块执行结束后局部变量自动释放,最终外部的aux仍为初始空值。
  • 末尾块遗漏:你判断空行才将当前块写入结果,但文件最后一个矩阵块后无空行,循环结束时最后一个块的数据会被丢弃。
  • 缺少数据转换逻辑:仅存储了原始行字符串,未做数值解析和二维矩阵拼装。
正确实现

推荐使用无全局变量的写法,直接让do块返回处理结果:

result = open("cell.dat") do f
    # 初始化结果数组,指定元素类型为Int型矩阵避免Any类型
    blocks = Matrix{Int}[]
    current_block_rows = []
    for line in eachline(f)
        # 去除首尾空白,避免空行带空格的情况
        stripped_line = strip(line)
        if !isempty(stripped_line)
            # 解析当前行的整数值
            row = parse.(Int, split(stripped_line))
            push!(current_block_rows, row)
        else
            # 空行触发块保存,将行向量拼接为二维矩阵
            if !isempty(current_block_rows)
                push!(blocks, permutedims(hcat(current_block_rows...)))
                current_block_rows = []
            end
        end
    end
    # 处理文件末尾无空行的最后一个块
    if !isempty(current_block_rows)
        push!(blocks, permutedims(hcat(current_block_rows...)))
    end
    return blocks
end

运行后result就是你需要的二维数组组成的数组,你给出的示例文件处理后结果为:

3-element Vector{Matrix{Int64}}:
 [7 9; 9 9]
 [7 1; 1 1; 3 3]
 [4 1]

内容的提问来源于stack exchange,提问作者wpkzz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:36:03