dynamicsoar's log

主に研究関係のメモ

Matlab で複数のスペースで区切られたデータ (separated by more than one white space) を読み込む → textscan → と思ったが importdata でいいか

Reading in ascii files with white space as delimiter. - MATLAB Answers - MATLAB Central にあった。というかもちろん公式ヘルプもある→ Read formatted data from text file or string - MATLAB textscan - MathWorks United Kingdom。けど、これの存在を知ってないとたどり着けないわけで…

たとえば

f n NODE_X(v) NODE_Y(v) NODE_Z(v)
0 0  -1.5000000e-02   6.1000001e-02   9.4994903e-11
0 1  -1.5000000e-02   6.0000000e-02   2.0000000e-03
0 2  -1.5000000e-02   5.9000001e-02   9.4994903e-11
1 0  -1.5000000e-02   1.0700000e-01   9.4994903e-11
1 1  -1.5000000e-02   1.0800000e-01  -2.0000000e-03
1 2  -1.5000000e-02   1.0900000e-01   9.4994903e-11

みたいなデータを読みたいとする。数値の数値の間に2つ以上のスペースがあるので、ふつうに dlmread とかするとそのスペース自体を 0 とみなされる(っぽい)。これは困る。そこで、

fid = fopen('input.dat')
matrix = textscan(fid, '', 'HeaderLines',1, 'CollectOutput',true);

とすれば行ける。HeaderLines のところの 1 はヘッダーが1行だから。

…と思っていたんだけど、importdata でいいわ。