2017-09-14 5 views
1

Je fonction deux fichiers * .m avec deux fonctionsMatlab application du compilateur omet appel

fonction on est main(folder_path) le second est calculate(file)

fonction main appelle calculate et écrit les résultats dans un fichier texte à l'aide Lorsque j'exécute le script dans Matlab, il écrit les bonnes valeurs à virgule flottante dans le fichier texte. Toutefois, lorsque j'utilise le compilateur d'applications et que vous créez un fichier * .exe, tous les résultats sont NaN dans le fichier texte.

J'ai inséré quelques sorties de débogage et j'ai remarqué qu'aucune des sorties calculate n'est imprimée lors de l'utilisation du fichier * .exe. Donc je suppose que la fonction calculate n'est jamais appelée.

Y at-il une raison pour un tel comportement? Est-ce que je manque quelque chose?

% file main.m 
function main(folder_path) 
wildcard = '*.h5'; 

files = dir([folder_path , wildcard]); 

% store results 
[num_files, ~] = size(files); 
vec_average = zeros(num_files); 

for index = 1:size(files) 
    average = calculate([folder_path, files(index).name]); 

    % store in vector for matlab plotting 
    vec_average(index) = average; 
end 

% calculate avg value from all files 
average = mean(vec_average); 

% write to text files, for jenkins plotting 
[file, msg] = fopen('average.property', 'w'); 
if file == -1 
    error(msg); 
end 
fprintf(file, 'YVALUE=%.5f\n', average(1)); 
fclose(file); 
end 

fichier suivant:

% file calculate.m 
function [average] = calculate(file_path) 
% read datasets - loop over h5 file 
data = h5read(file_path ,'/datasets'); 

num_elements = data.num_elements; 
elements = data.elements; 

vec_y = []; 

for index = 1:size(elements) 
    vec_y = [vec_y, elements(i)]; 
end 

average = mean(vec_y); 
end 
+0

Je ne sais pas quoi clarifier Il n'y a pas de message d'erreur et rien d'autre, ça fonctionne dans un sens et dans l'autre, ça ne fonctionne pas, est-ce que vous voulez voir le – user3932876

+0

Je lis ce qui est là, mais la seule chose que je peux vous présenter est de travailler le code Matlab (raccourci) qui ne fonctionne pas après avoir utilisé le compilateur d'application – user3932876

+0

Bien sûr, mais au moins maintenant nous pouvons l'essayer pour nous-mêmes, et voir aussi quelles fonctions sont contenues dans le code MATLAB, certaines fonctions ne t compiler correctement. Dans ce cas: je soupçonne que 'h5read' est en faute. Je ne suis pas familier avec le fonctionnement interne du compilateur, mais c'est la fonction qui n'est pas "basique" en tant que telle. – Adriaan

Répondre

0

Si calculate est jamais appelé -> cela signifie que votre variable files est vide -> êtes-vous sûr que votre appellent le programme principal de la même façon? c'est-à-dire folder_path la même chose dans les deux appels?

Si votre sous Windows, vous pouvez exécuter à partir d'un dos rapide et vous verrez une erreur/AFF/messages fprintf qui seraient normalement écrits dans le terminal (donc pour aider debug ajouter beaucoup plus, par exemple folder_path, num_files etc. ..

+0

oui, j'ai utilisé 'disp()' pour afficher les variables dans matlab et windows console. Toutes les sorties sont absolument identiques dans Matlab et après la compilation. Mais à la ligne où 'calculate's est appelée la version compilée fait des choses étranges – user3932876

+0

Vous aurez besoin de développer des choses étranges - vérifiez que le fichier qu'il essaie de lire existe - est-ce qu'il lance une erreur - si oui quelle erreur etc. .... – matlabgui

+0

Le fichier existe car j'ai utilisé un chemin absolu qui a fonctionné dans Matlab L'exe est dans le même dossier et utilise le même chemin absolu dans le même format – user3932876