逐行解析包含Julia数据的文本文件?

逐行解析包含Julia数据的文本文件?,julia,Julia,我试图读取写入文本文件的张量元素。文件的第一行定义了张量标注。下一行给出了张量值。在Matlab语法中,我能够通过以下代码行实现这一点,但我很难在Julia中编写等效函数。非常感谢您的帮助 fid=fopen(fname); shape = sscanf(fgetl(fid),'%i'); for j = 1:shape(3) for i = 1:shape(1) A(i,:,j) = str2num(fgets(fid)); end en

我试图读取写入文本文件的张量元素。文件的第一行定义了张量标注。下一行给出了张量值。在Matlab语法中,我能够通过以下代码行实现这一点,但我很难在Julia中编写等效函数。非常感谢您的帮助

fid=fopen(fname);
    shape = sscanf(fgetl(fid),'%i');
    for j = 1:shape(3)
    for i = 1:shape(1)
        A(i,:,j) = str2num(fgets(fid));
    end
    end
fclose(fid);
典型文件的第一行如下所示:

         4           4          48
1.00000  0.00000  0.00000  0.00000
0.00000  1.00000  0.00000  0.00000
0.00000  0.00000  1.00000  0.00000
0.00000  0.00000  0.00000  1.00000
-1.00000  0.00000   0.00000  0.00000
0.00000  1.00000   0.00000  0.00000
0.00000  0.00000  -1.00000  0.00000
0.00000  0.00000   0.00000  1.00000
-1.00000   0.00000  0.00000  0.00000
...

正如@colin在他的评论中所说,这样一个文件可以很容易地读入Julia,如下所示:

julia> data, heading = readdlm("/tmp/data.txt",  header=true)
(
9x4 Array{Float64,2}:
  1.0  0.0   0.0  0.0
  0.0  1.0   0.0  0.0
  0.0  0.0   1.0  0.0
  0.0  0.0   0.0  1.0
 -1.0  0.0   0.0  0.0
  0.0  1.0   0.0  0.0
  0.0  0.0  -1.0  0.0
  0.0  0.0   0.0  1.0
 -1.0  0.0   0.0  0.0,

1x4 Array{AbstractString,2}:
 "4"  "4"  "48"  "")
返回的两个值是float64数组和作为字符串数组的标题行


是否有任何用途?

如果您想逐行阅读,可以使用以下方法:

a = open("/path/to/data.txt", "r")
for line in eachline(a)
    print(line) ## or whatever else you want to do with the line.
end
close(a)
特别是,类似这样的语法:

LineArray = split(replace(line, "\n", ""), "\t")
可能对你有用。它将(a)删除行尾的换行符,然后(b)将其拆分为一个索引数组,这样您就可以根据元素在行中占据的可预测位置将其拉出

你也可以说:

Header = readline(a);
在打开文件之后,如果您想特别拉出头文件,然后运行上面的循环。或者,您可以在
eachline(a)
上使用
enumerate()
,然后对枚举的索引执行逻辑(例如,当索引=1时定义标头)


请注意,这比daycaster给出的答案要慢,因此只有当您确实需要额外的灵活性时,才值得使用。

如果您能给出希望代码阅读的数据文件的简短示例,对于那些不熟悉Matlab语法的人来说,这将是非常有价值的。好主意!谢谢我不太明白为什么需要逐行解析。在提供的示例中,每行的列数相同,并且所有数据都是数字,那么为什么不能只
readdlm