我知道是否有办法将这样存储的数据加载到文件中:
$ cat foo
12.108 24.21; 89.02 17.3131; 93.192368 13.10012; ....
10.3069 41.7442; 90.1277 19.351; 93.192368 13.10012; 91.1956 15.29712; ...
...
所以表格是:
x y; x y; x y;
等等。
由几个x y
值定义的每个点是构成几何线的点。
文件的每一行都包含一个由其点序列定义的唯一几何线。有些线只有两个点,有几个是几个。它有所不同。因为没有固定数量的字段,我现在无法加载该文件。
理想情况下,我希望将每一行存储在变量中,或者更好,将所有行存储在一种索引结构,单元格或nD矩阵中,以便我可以进一步轻松循环在它们的线段上(线段由一条线内的2个连续点定义)。
感谢。
答案 0 :(得分:1)
将数据存储在数组中似乎是一个优雅的解决方案:
fid=fopen("File.csv");
tline=fgetl(fid);
ix=1;
while ischar(tline)
A{ix}=str2num(tline);
tline=fgetl(fid);
ix=ix+1;
end
fclose(fid);
fopoen
fgetl
初始化tline
ix
)设置为1(避免i
是一个好主意,因为它也是一个数学常量......)tline
是一个字符(请记住,在文件fgetl
的末尾返回-1
)存储转换为fgetl
值的num
返回行在str2num
数组的A{ix}
部分使用A
。fclose
关闭文件。因此,A{ix}
将输入文件的第i行作为(x,y)结构化子数组:
> A{1}
ans =
12.108 24.21
89.02 17.3131
93.192368 13.10012
...
> class(A{1})
ans = double
https://www.gnu.org/software/octave/doc/v4.0.0/Opening-and-Closing-Files.html
https://www.gnu.org/software/octave/doc/v4.0.0/Line_002dOriented-Input.html