从 Julia 中具有混合长度的数组/向量的文件读取数据



我有一个文件,原则上看起来像这样

1 2 2,3,4 5
6 3 7,8 9
10 5 11,12,13,14,15 16

4 列,其中第 1 列和第 4 列是整数/浮点列,但第 2 列指示第 3 列的向量中有多少个元素,因此第 3 列实际上是具有不同长度向量的列

如何最好地阅读此内容并在"变量"/字典中最好地表示此结构。 我尝试将 readdlm 与 delim = "," 一起使用,我可以在文件中读取,但需要轻松处理结构以获取用于绘图等的整数/浮点数/数组。实际上,有更多的列和行,哪些列是可变大小的向量因情况而异

所以我不是100%确定你到底想做什么。但是,如果您想将文件解析为某种数据结构,这里有一个解决方案:

function parseline(line::AbstractString)
fields = split(line, ' ')
v = [parse(Int, i) for i in split(fields[3], ',')]
lenv = parse(Int, fields[2])
lenv == length(v) || throw(DimensionMismatch("Incorrect length for $v"))
result = Any[parse(Int, fields[1]), v, parse(Int, fields[4])]
return result
end
function parsefile(path::AbstractString)
return open(path) do file
[parseline(line) for line in eachline(file)]
end
end

第一个函数分析一行并检查第 3 列的长度是否与第 2 列中的值匹配。它返回 [列 1、列 3、列 4] 的向量。第二个函数只是对文件中的每一行执行此操作。

最新更新