GNU-Octave:加载包含几何线作为坐标块的数据

时间:2016-07-24 14:14:08

标签: matlab load line octave

我知道是否有办法将这样存储的数据加载到文件中:

$ 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个连续点定义)。

感谢。

1 个答案:

答案 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);
  1. 使用fopoen
  2. 打开文件
  3. 使用fgetl初始化tline
  4. 将迭代值(此为ix)设置为1(避免i是一个好主意,因为它也是一个数学常量......)
  5. 虽然tline是一个字符(请记住,在文件fgetl的末尾返回-1)存储转换为fgetl值的num返回行在str2num数组的A{ix}部分使用A
  6. 不要忘记使用fclose关闭文件。
  7. 因此,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