Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将java输出重定向到matlab_Matlab_Redirect_Interface_Jar - Fatal编程技术网

如何将java输出重定向到matlab

如何将java输出重定向到matlab,matlab,redirect,interface,jar,Matlab,Redirect,Interface,Jar,我有一个编译过的.JAR文件,它获取两个数据集作为输入,并生成一些分数(实数)。输出在控制台(cmd prompt env.)中打印。但是,我想在我的matlab代码中多次调用该函数。我无法访问JAR文件的源代码。是否有任何有效的方法(可能不是使用文件)将jar文件的结果返回到matlab 示例JAR输出: a:82.212% b:0% c:0.003% d:13.471% e:4.809% 我要这5个号码。它们总是以相同的格式打印 是否有任何方法可以将这些结果重定向到一个TCP/IP端口

我有一个编译过的.JAR文件,它获取两个数据集作为输入,并生成一些分数(实数)。输出在控制台(cmd prompt env.)中打印。但是,我想在我的matlab代码中多次调用该函数。我无法访问JAR文件的源代码。是否有任何有效的方法(可能不是使用文件)将jar文件的结果返回到matlab

示例JAR输出:


a:82.212%

b:0%

c:0.003%


d:13.471%

e:4.809%


我要这5个号码。它们总是以相同的格式打印

是否有任何方法可以将这些结果重定向到一个TCP/IP端口,matlab可以读取结果


感谢使用
system()
函数的第二个输出
结果。它将包含您需要解析的必需输出字符串

[status, result] = system('command');
现在,假设您有
结果
字符串,下面介绍如何将其解析为值向量:

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

使用
system()
函数的第二个输出
result
。它将包含您需要解析的必需输出字符串

[status, result] = system('command');
现在,假设您有
结果
字符串,下面介绍如何将其解析为值向量:

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

另一个要考虑的选项是把JAR连接到MATLAB程序,把它放到JavaCasSPATH上。然后,您可以直接从M代码调用JAR中定义的任何公共对象的方法。如果有一个合适的入口点来计算这些值,那么您可以直接调用计算方法,而不必经过JAR的

main
,并且避免了分解到单独的JVM进程和解析输出的开销。如果你最终调用它很多,它会更有效。

< P>另一个考虑的选项是把JAR与你的Matlab程序链接到JavaCasSPATH上。然后,您可以直接从M代码调用JAR中定义的任何公共对象的方法。如果有一个合适的入口点来计算这些值,那么您可以直接调用计算方法,而不必经过JAR的
main
,并且避免了分解到单独的JVM进程和解析输出的开销。如果你经常调用它,它会更有效率。

如何调用java,该方法的接口是什么?输入数据集有多大?我使用matlab中的系统函数。我很感兴趣的是,我是否可以将jar的结果重定向到其他文件(例如tcp/ip端口),然后从matlab读取结果。数据集不是问题,只有结果对我很重要。如何调用java,方法的接口是什么?输入数据集有多大?我使用matlab中的系统函数。我很感兴趣的是,我是否可以将jar的结果重定向到其他文件(例如tcp/ip端口),然后从matlab读取结果。数据集不是问题,只有结果对我很重要。非常感谢。这就是答案。我建议将idx定义为一个数组,并使用“idx[k]=strfind(result(idx(k-1)+1):end,names{k};”。这使得处理更复杂的情况成为可能。谢谢,我相信解析字符串可以更有效地完成,这只是一个例子。不客气,非常感谢。这就是答案。我建议将idx定义为一个数组,并使用“idx[k]=strfind(result(idx(k-1)+1):end,names{k};”。这使得处理更复杂的情况成为可能。谢谢,我相信解析字符串可以更有效地完成,这只是一个例子。不客气。我已经反编译了JAR文件,它生成了一些JAD文件。现在我在谷歌上搜索关于集成matlab和java的内容,正如你上面所说的。matlab文档的“外部接口”部分(在帮助浏览器或Mathworks的网站上)有关于这方面的信息。这里有一个很好的起点:我同意直接从Matlab使用Java对象和方法比使用
system()
call更好。您不需要反编译JAR,只需将它添加到Matlab的Java类路径中,如下所示:javaaddpath(fullfile(pwd,'JAR','MyJarName.JAR');(假设您的jar名为MyJarName.jar,并且位于当前工作目录的jar目录中)。您可以简单地以与Matlab类类似的方式实例化Java类,例如myInstance=org.foo.bar.SomeJavaClass();(包括类的包名称)。然后可以直接调用Java类的方法,例如myInstance.someMethod();我已经反编译了JAR文件,它生成了一些JAD文件。现在我在谷歌上搜索关于集成matlab和java的内容,正如你上面所说的。matlab文档的“外部接口”部分(在帮助浏览器或Mathworks的网站上)有关于这方面的信息。这里有一个很好的起点:我同意直接从Matlab使用Java对象和方法比使用
system()
call更好。您不需要反编译JAR,只需将它添加到Matlab的Java类路径中,如下所示:javaaddpath(fullfile(pwd,'JAR','MyJarName.JAR');(假设您的jar名为MyJarName.jar,并且位于当前工作目录的jar目录中)。您可以简单地以与Matlab类类似的方式实例化Java类,例如myInstance=org.foo.bar.SomeJavaClass();(包括类的包名称)。然后可以直接调用Java类的方法,例如myInstance.someMethod();