0

複数のテキスト ファイルがあり、それぞれがシミュレーションの結果です。ファイルの内容は次のとおりです。

Parameter_1 = value
Parameter_2 = value
.....

Test 1
Min: value
Max: value
Average: value

Test 2
Min: value
Max: value
Average: value

各ファイルには異なる値を持つ同じタイプのパラメーターが含まれており、もちろんテスト値も異なります。

このデータを Matlab にインポートできる必要があります。Matlab でやりたいことは、パラメーター (x 軸) とテスト結果のグラフを作成できるようにすることです。たとえば、変更Test 1 Min時の値のグラフはParameter_1、Parameter_1 のみが異なる n 個のファイルを選択し、Test 1 Min の結果を比較することを意味します。

これが私の質問です。Matlab に簡単にインポートできるようにするには、テキスト ファイルでそのデータをどのように整理すればよいですか? 私はMatlabが初めてなので、何が最善の方法なのかわかりません。

私が始めるのに役立つアイデアは素晴らしいでしょう。ありがとう!

4

3 に答える 3

3

ファイルに根本的な問題はありません。パーサーを作成する必要があります。しかし、それほど難しくないことを恐れないでください。

正規表現はこれに非常に役立ちます。私はそれのコツをつかむために少し読んでいます-しかしそれは信じられないほど強力です。

私はこのようなコードを使用します:

fid = fopen('myfile.txt');
result = {};
result_entry=[];
while 1
    tline = fgetl(fid);
    if ~ischar(tline), break, end

    r = regexp(tline,'^(?<key>\w+)\W*=\W*(?<value>.*?)\W*$','names');
    if ~isempty(r)
    parameter_list.(r.key) = r.value;
    continue
    end

    % does a new entry start?
    r = regexp(tline,'^Test\W+(?<num>\d+)\W*$','names');
    if ~isempty(r)
        result = [result,{result_entry}];
        result_entry = struct('TestNumber',r.num);
        continue
    end

    r = regexp(tline,'^(?<key>\w+)\W*:\W*(?<value>.*?)\W*$','names');
    if ~isempty(r)
        result_entry.(r.key) = r.value;
    end
end
fclose(fid);
于 2012-08-16T13:58:15.140 に答える
2

「データを整理する最善の方法」は、非常に論争の的となる質問です。10人に聞くと11通りの答えが返ってきます。多くの場合、データのインポートとエクスポートに使用できるデータと機能によって異なります。

そうは言っても、Matlab は純粋な数値データのインポートに優れています (しゃれは意図していません)。数字だけで構成されるようにファイルを編成できる場合は、「load」、「dlmread」、または「csvread」コマンドをすばやく実行すると、それらがインポートされます。テキストデータを含めると、かなり複雑になります。

たとえば、ファイルの一貫性が非常に高く、次のようにファイルを整理できる場合:

Param1Value,Param2Value,Param3Value
1,Test1min,test1max,test1average
2,Test2min,test2max,test2average

例のすべてのテキストは単なる数値 (整数または浮動小数点数) であり、Matlab にインポートするのは非常に簡単です。最初の行にパラメーター値が含まれていることがわかります

data = csvread('input.csv');
params = data(1,:);

また、テスト番号、最小値、最大値、および平均値をすばやく引き出すことができます。

tests = data(2:end,1);
mins = data(2:end,2);
maxs = data(2:end,3);
avgs = data(2:end,4);

しかし、これはすべて、アウトプット側の柔軟性にかかっています。

于 2012-08-16T13:49:16.443 に答える
0

単なるアイデア-有効なmatlab mファイルとして保存できるJSONに似ています。そうすれば、すべての構造機能を持つことができます matlab は、かなり迅速な読み取りを提供します。

于 2012-08-16T18:52:02.127 に答える