0

入力として 2 つのデータセットを取得し、いくつかのスコア (実数) を取得するコンパイル済みの .JAR ファイルがあります。出力はコンソールに出力されます (cmd prompt env.)。ただし、matlab コード内で関数を複数回呼び出したいと考えています。JAR ファイルのソース コードにアクセスできません。jar ファイルの結果を matlab に戻す効率的な方法 (おそらくファイルを使用する以外) はありますか。

サンプル JAR 出力:


a: 82.212%

b: 0%

c: 0.003%


日: 13.471 %

e: 4.809%


この5つの数字が欲しいです。それらは常に同じ形式で印刷されます。

これらの結果を、たとえば、matlab が結果を読み取ることができる TCP/IP ポートにリダイレクトする方法はありますか?

ありがとう

4

2 に答える 2

2

result関数からの 2 番目の出力を使用しsystem()ます。解析する必要がある必要な出力文字列が含まれます。

[status, result] = system('command');

ここで、文字列があると仮定して、resultそれを値のベクトルに解析する方法を次に示します。

names = {'a', 'b', 'c', 'd', 'e'}';
values = nan(size(names));
for k = 1 : length(names)
    idx = strfind(result, names{k});
    assert(numel(idx) == 1);
    values(k) = sscanf(result(idx + length(names{k}) + 1 : end), '%f');
end
于 2012-09-30T20:01:05.340 に答える
2

考慮すべきもう 1 つのオプションは、JAR を javaclasspath に配置して、Matlab プログラムにリンクすることです。次に、M コードから直接、JAR で定義されたパブリック オブジェクトのメソッドを呼び出すことができます。これらの値を計算するための適切なエントリ ポイントがある場合は、JAR を経由する代わりに計算メソッドを直接呼び出すことができmain、別の JVM プロセスにシェルアウトして出力を解析するオーバーヘッドを回避できます。たくさん呼び出すと、より効率的になります。

于 2012-10-02T05:00:01.480 に答える