2016-07-24 55 views
1

enthält würde ich wissen, ob es eine Möglichkeit gibt, Daten wie diese in einer Datei gespeichert zu laden:GNU-Oktave: Lastdaten, die geometrischen Linien als Blöcke von Koordinaten

$ 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; ... 
... 

So ist die Form:
x y; x y; x y; und so weiter.
Jeder durch ein Paar von x y definierte Punkt ist ein Punkt, der eine geometrische Linie darstellt.

Jede Zeile der Datei enthält eine eindeutige geometrische Linie, die durch ihre Punktfolge definiert ist. Einige Linien bestehen nur aus zwei Punkten, andere aus mehreren. Es variiert. Da es keine konstante Anzahl von Feldern gibt, kann ich diese Datei jetzt nicht laden.

Idealerweise möchte ich jede Zeile in einer Variablen, oder besser, alle Zeilen in einer Art indizierten Struktur, Zelle oder nD-Matrix speichern, so dass ich weiter auf ihre Segmente (ein Segment wird definiert durch 2 aufeinanderfolgende Punkte innerhalb einer Linie).

Danke.

Antwort

1

Daten in einem Array speichern scheint eine elegante Lösung zu sein: fgetl

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. öffnen Sie die Datei mit fopoen
  2. Verwenden tline mit
  3. Stellen einen iterativen Wert zu initialisieren, hier ix, zu 1 (Vermeiden i ist eine gute Idee, da es auch eine mathematische Konstante ist ...)
  4. Während tline ist eine CHAR (denken Sie daran, am Ende der Datei fgetl-1 zurückgibt) speichern die fgetl zurückLeitung auf einen Wert umgewandelt numstr2num im A{ix} Teil des A Array.
  5. Vergessen Sie nicht, die Datei mit fclose zu schließen.

Somit nimmt die A{ix} ix-ten Zeile der Eingabedatei in (x, y) strukturiert Subanordnungen:

> 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