首页 > 解决方案 > Julia:readdlm 因前导空白而失败

问题描述

using DelimitedFiles
dat = readdlm("tmp.dat", ' ', Float64, '\n')

失败了

ERROR: LoadError: at row 1, column 1 : ErrorException("file entry \"\" cannot be converted to Float64")

当数据文件以空格(空白)开头时:

 1 2
3 4

当我删除第一个空格时,Julia 程序就可以工作了。

是否可以选择readdlm忽略前导空格,或者是否有同样简单的替代方法?

编辑:阅读下面的答案(谢谢!),我意识到我没有准确地表达我的问题。我没有编辑上述内容并因此移动球门柱,而是解释了我的情况。我有 ASCII 数据文件,其中的每一行可能以也可能不以未知数量的空格开头。(此外可能还有尾随空格。)

基本上,我想到的是用 C、Ruby、Fortran、gnuplot 等流行语言读取的“常用”ASCII 文件。. . 在所有这些语言中,ASCII 数据文件中的前导和尾随空格都被忽略了,单词间的额外空格也被忽略了。

我很惊讶readdlm没有这样的阅读“模式”。. . .

标签: julia

解决方案


readdlmskipstart仅支持通过关键字参数跳过整行。因此,您所能做的就是使用seek跳过流中的初始字节。

设置:

open("f.txt","w") do f;println(f," 1 2\n3 4");end

实际代码:

julia> open("f.txt") do f
           seek(f,1)
           readdlm(f, ' ', Float64, '\n')
       end
2×2 Matrix{Float64}:
 1.0  2.0
 3.0  4.0

推荐阅读