2011-09-17 4 views
1

Est-ce que Octave peut permettre à l'utilisateur de sélectionner un fichier d'entrée? J'ai vu du code comme ça pour Matlab, mais ça ne marche pas dans Octave.Octave sélectionner un fichier?

Une méthode basée sur un gui serait préférable, mais une sorte de choix de ligne de commande fonctionnerait également. Ce serait génial s'il y avait un moyen de le faire qui fonctionnerait à la fois dans Matlab et Octave.

J'ai trouvé this pour Matlab mais cela ne fonctionne pas dans Octave, même lorsque vous installez le paquet Java Octave Forge pour la fonction listdlg. Dans Octave, dir() vous donne:

647x1 struct array containing the fields: 

    name 
    date 
    bytes 
    isdir 
    datenum 
    statinfo 

mais je ne sais pas comment convertir ce à un tableau de chaînes listdlg attend.

+0

« bonne » comme dans une méthode basée sur une interface graphique? – Sriram

Répondre

1

Vous avez déjà installé le Octave Forge java package, vous pouvez donc créer des instances de n'importe quelle classe java et appeler n'importe quelle méthode java.

Par exemple, pour créer un JFileChooser et appeler la méthode 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() 

btw. J'ai eu quelques problèmes pour installer le paquet. Voici un fix pour Ubuntu. Cela a également fonctionné pour mes tests Debian.

EDIT

@NoBugs En réponse à votre commentaire:

Si vous devez utiliser listdlg vous pouvez effectuer les opérations suivantes:

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

Cela devrait être compatible avec Matlab, par Je ne peux pas le tester maintenant.

Si vous voulez sélectionner plusieurs fichiers utiliser ceci:

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 
+0

Bon code! Cela a fonctionné très bien pour moi même sans cette correction, avec Ubuntu et compilé Octave 3.4.2. Cependant, je cherchais du code qui ferait l'équivalent du code Matlab lié, en demandant à l'utilisateur de choisir un fichier dans le répertoire courant, en utilisant listdlg. Compatibilité, ou des différences minimes de Matlab, serait un gros plus. – NoBugs

+0

Ca marche chez Matlab, super! – NoBugs

0

Je ne suis jamais tombé sur un dialogue de fichier ouvert en octave.
Si vous cherchez une méthode basée sur le gui peut-être guioctave peut vous aider. Je ne l'ai jamais utilisé, car il ne semble disponible que pour les machines Windows.

Une solution possible serait d'écrire un petit script en octave, ce qui permettrait à l'utilisateur d'analyser les répertoires et de sélectionner un fichier comme celui-ci.

+0

Matlab peut utiliser Listdlg pour demander un fichier: http://www.mathworks.com/help/techdoc/ref/listdlg.html, et Octave a aussi Listdlg, si vous installez le paquet Java Octaveforge. Cependant, je n'ai pas été en mesure de l'obtenir pour demander un fichier en utilisant un exemple de code Matlab. – NoBugs

Questions connexes