Octave是否有一种让用户选择输入文件的好方法?我已经看到Matlab这样的代码,但在Octave中不起作用。
首选基于gui的方法,但某种命令行选择也可以。如果有一些方法可以在Matlab和Octave中使用,那将会很棒。
我为Matlab找到了this但是它在Octave中不起作用,即使你为listdlg函数安装了Octave Forge Java包也是如此。在Octave中,dir()为您提供:
647x1 struct array containing the fields:
name
date
bytes
isdir
datenum
statinfo
但我不知道如何将其转换为listdlg期望的字符串数组。
答案 0 :(得分:1)
您已经安装了Octave Forge java package,因此您可以创建任何java类的实例并调用任何java方法。
例如,要创建JFileChooser
并调用JFileChooser.showOpenDialog(Component parent)
方法:
frame = javaObject("javax.swing.JFrame");
frame.setBounds(0,0,100,100);
frame.setVisible(true);
fc = javaObject ("javax.swing.JFileChooser")
returnVal = fc.showOpenDialog(frame);
file = fc.getSelectedFile();
file.getName()
顺便说一下。我在安装包装时遇到了一些麻烦。 这是Ubuntu的fix。这也适用于我的Debian测试。
修改强>
@NoBugs回复你的评论:
如果您需要使用listdlg,您可以执行以下操作:
d = dir;
str = {d.name};
[sel,ok] = listdlg('PromptString','Select a file:',...
'SelectionMode','single',...
'ListString',str);
if ok == 1
disp(str{sel(1)});
end
这应该与matlab兼容,我现在无法测试它。
如果要选择多个文件,请使用:
d = dir;
str = {d.name};
[sel,ok] = listdlg('PromptString','Select a file:',...
'SelectionMode','multiple',...
'ListString',str);
if ok == 1
imax = length(sel);
for i=1:1:imax
disp(str{sel(i)});
end
end
答案 1 :(得分:0)
我从未在八度音阶中遇到过打开文件对话框 如果您正在寻找基于gui的方法,guioctave可以帮助您。我从未使用它,因为它似乎只适用于Windows机器。
一个可能的解决方案是在八度音程中编写一个小脚本,这将允许用户解析目录并选择这样的文件。
答案 2 :(得分:0)
我想我会为这个旧问题提供更新的答案,因为它出现在其他问题的“相关问题”字段中。
Octave 提供了 uigetdir
和 uigetfile
函数,它们可以满足您的期望。