2

「file.txt」に次の形式のデータがあります。

b0,  2,1
b1,  3,4
b2,  5,6
b3,  7,8
b4,  9,10
L0, 11, 12
L1, 13, -154
L2, 16, 18
L3,-19,-20
L4,-21,-22
L5,-23,24
L6, 25,28
L7, 27,30
L8, 31,35
L9,-38,40
b0,  0.1,89

このデータは、大きな数になるまで同じ順序 (つまり、b1、b2、b3...) で続きます。b0...b4 の 2 つの数値 (つまり、各行がコンマで区切られている数値) をそれぞれ行列形式で読み取り、それらを使用してさらに計算できるようにしたいと考えています。基本的に、各 b0 は「file.txt」の 15 行ごとに発生し、b1、b2、b3、b4 についても同様です。「textscan」でいくつかのサンプル コードを使用してみましたが、残念ながらエラーが発生しました。どんな助けでも大歓迎です。ありがとう!

4

4 に答える 4

0

これが私のアプローチです。MATLAB で for ループを使用するのは面倒ですが、セルを操作するたびに、それらを使用していることに気づきます。おそらくこれを行うにはもっと良い方法がありますが、これはあなたが私に与えたデータに対してうまくいくようです.

f = fopen('data.txt');
a = textscan(f, '%s', 'Delimiter', ',');
names  = [];
vals_a = [];
vals_b = [];
for i = 1:3:numel(a{1})
    names  = [names;  a{1}{i+0}];
    vals_a = [vals_a; str2num(a{1}{i+1})];
    vals_b = [vals_b; str2num(a{1}{i+2})];
end
fclose(f);
于 2013-06-13T20:38:22.740 に答える
0

コンマ区切りの値があるため、で使用される区切り文字を変更する必要がありますtextscan。2 つの数値を配列に結合するには、次のCollectOutputオプションを使用できます。

fid = fopen('sample.txt');
C = textscan(fid, '%s %f %f', 'Delimiter', ',', 'CollectOutput', true);
fclose(fid);

b0すべてのフィールドを抽出するには:

values = C{2}(strcmp(C{1}, 'b0'), :);

で始まるすべての行の値を抽出するb0, ..., b4

values = C{2}(ismember(C{1}, {'b0', 'b1', 'b2', 'b3', 'b4'}), :);
于 2013-06-13T20:45:13.133 に答える