开发者

Octave select a file?

Does Octave have a good way to let the user select an input file? I've seen code like this for Matlab, but doesn't work in Octave.

A gui b开发者_运维知识库ased method would be preferred, but some sort of command-line choice would work also. It would be great if there were some way to do this that would work in both Matlab and Octave.

I found this for Matlab but it does not work in Octave, even when you install Octave Forge Java package for the listdlg function. In Octave, dir() gives you:

  647x1 struct array containing the fields:

    name
    date
    bytes
    isdir
    datenum
    statinfo

but I don't know how to convert this to an array of strings listdlg expects.


You have already the Octave Forge java package installed, so you can create instances of any java class and call any java method.

For example to create a JFileChooser and call the JFileChooser.showOpenDialog(Component parent) method:

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()

Btw. I had some troubles installing the package. Here is a fix for Ubuntu. that worked also for my Debian Testing.

EDIT

@NoBugs In reply to your comment:

If you need to use listdlg you can do the following:

d = dir;
str = {d.name};
[sel,ok] = listdlg('PromptString','Select a file:',...
                'SelectionMode','single',...
                'ListString',str);
if ok == 1
    disp(str{sel(1)});
end

This should be compatible with matlab, by I cannot test it right now.

If you want to select multiple files use this:

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


I never came across an open-file-dialog in octave.
If you are looking for a gui based method maybe guioctave can help you. I never used it, because it appears only be available for windows machines.

A possible solution would be to write a little script in octave, that would allow the user to parse through the directories and select a file like that.


Thought I'd provide an updated answer to this old question, since it is appearing in the 'related questions' field for other questions.

Octave provides the uigetdir and uigetfile functions, which do what you expect.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜