如何在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
相关产品推荐
相关产品推荐

