Octave选择一个文件?

时间:2011-09-17 01:01:19

标签: file openfiledialog octave

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期望的字符串数组。

3 个答案:

答案 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 提供了 uigetdiruigetfile 函数,它们可以满足您的期望。