2017-08-16 5 views
2

Je voudrais écrire plusieurs messages et tables sur le même fichier .txt.Comment formater des instructions d'impression avec deux variables vectorielles?

Par exemple:

x=[23.9,10.9,8.9,14.2] 
y=[9.83,8.04,7.47,8.32] 

file=fopen('Results.txt','wt'); 
fprintf(file,'Results1\n'); 
fprintf(file,'%.2f %.2f\r\n',x,y); 
fprintf(file,'Results2\n'); 
fclose(file); 

Je reçois ce résultat txt:

Results1 
23.90 10.90 

8.90 14.20 

9.83 8.04 

7.47 8.32 

Results2 

Mais je devrais celui-ci:

Results1 
23.90 9.83 

10.90 8.04 

8.90 7.47 

14.20 8.32 

Results2 

Au lieu de fprintf(file,'%.2f %.2f\r\n',x,y);), je tentais utiliser:

ResultsTable2 = table(x,y); 
writetable(file,ResultsTable2); 

mais n'a pas réussi. Comment écrire le fichier .txt requis?

+0

Avez-vous essayé d'ouvrir le fichier dans ajouter le mode 'fopen ('...', 'at')' – jandob

+0

oui. Je crois que l'writetable n'est pas la bonne commande –

Répondre

2

Un examen attentif de votre sortie montre que tous les éléments de x ont été imprimés avant tous les éléments de y.

La documentation confirme qu'il s'agit du comportement attendu. Consultez this example

A1 = [9.9, 9900]; 
A2 = [8.8, 7.7 ; ... 
     8800, 7700]; 
formatSpec = 'X is %4.2f meters or %8.3f mm\n'; 
fprintf(formatSpec,A1,A2) 

X est 9.90 mètres ou 9900,000 mm

X est 8,80 mètres ou 8800,000 mm

X est 7,70 mètres ou 7700,000 mm

Même si la les arguments à fprintf sont dans l'ordre A1, A2. Il imprime d'abord toutes les valeurs de A1, puis imprime toutes les valeurs de A2 en respectant l'ordre d'un seul index. Par conséquent, si vous souhaitez alterner les valeurs x et y pendant l'impression, vous devez les entrelacer dans une nouvelle variable. Il y a plusieurs façons de le faire.

Un exemple,

XY = reshape([x;y], 1, []); 

Ensuite, tout devrait imprimer comme prévu

fprintf(file, '%.2f %.2f\r\n', XY); 
% or if you want to print to command window 
% fprintf('%.2f %.2f\r\n', XY); 

23,90 9,83

10,90 8,04

8,90 7,47

14,20 8,32

2

La bonne réponse pour savoir comment les données de sortie avec fprintf est donnée par Cecilia: chaque argument sera réitérée complètement à travers dans l'ordre qu'il apparaît dans la liste des arguments, vous devez combiner les données en un argument de matrice qui sera itéré par colonne pour générer la sortie désirée.

Vous avez également mentionné d'essayer d'utiliser un table et la fonction writetable, donc je pensais que j'ajouterais la bonne façon de le faire que si vous étiez curieux:

ResultsTable2 = table(x(:), y(:)); % Pass data as column vectors 
writetable(ResultsTable2, 'Results.txt', 'WriteVariableNames', false);