writematrix: how to get formatted txt-output?

11 Ansichten (letzte 30 Tage)
JarryG
JarryG am 24 Sep. 2024
Kommentiert: Stephen23 am 24 Sep. 2024
I have been using "dlmwrite" to get nicely formatted text output:
dlmwrite('file.txt',M,'delimiter',' ','precision','%10.2f');
txt-file looked like:
100.00 0.00 4500.00
0.00 1.00 38.29
1.00 1.00 38.22
As "dlmwrite" is not recommended anymore, I tried to use "writematrix" instead. But it does not have "precision" parameter:
writematrix(round(M,2),'file.txt','Delimiter',' ');
txt-file is not so nicely formatted:
100 0 4500
0 1 38.29
1 1 38.22
That's a problem especially with bigger matrices, as offset between lines is getting bigger and bigger, and I can not recognize columns anymore. Is there any way to fix this?

Antworten (3)

Stephen23
Stephen23 am 24 Sep. 2024
M = [100,0,4500;0,1,38.29;1,1,38.22]
M = 3×3
1.0e+03 * 0.1000 0 4.5000 0 0.0010 0.0383 0.0010 0.0010 0.0382
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
S = join(compose("%10.2f",M),'');
writelines(S,"test.txt")
Checking:
type test.txt
100.00 0.00 4500.00 0.00 1.00 38.29 1.00 1.00 38.22

Aquatris
Aquatris am 24 Sep. 2024
Bearbeitet: Aquatris am 24 Sep. 2024
Use 'tab' delimiter option instead of single space.
M = [100 0 4500;0 1 38.29;1 1 38.22];
writematrix(round(M,2),'file.txt','Delimiter',' ');
type('file.txt')
100 0 4500 0 1 38.29 1 1 38.22
writematrix(round(M,2),'file2.txt','Delimiter','tab');
type('file2.txt')
100 0 4500 0 1 38.29 1 1 38.22

SACHIN KHANDELWAL
SACHIN KHANDELWAL am 24 Sep. 2024
Hi,
Seems that you want to use 'precision' as key value pair with 'writematrix'. I think this is currently limitation. I found the following workaround working :
M = magic(5)*pi; % Create a 5x5 matrix of numeric values
s = num2str(M,3); % create a character array that represents the numeric values in "M" with 3 significant digits
T = str2num(s); % convert "s" back into a numeric matrix.
writematrix(T,'myFile.txt','Delimiter',' ');
  1 Kommentar
Stephen23
Stephen23 am 24 Sep. 2024
In case anyone is wondering:
M = [100,0,4500;0,1,38.29;1,1,38.22]
M = 3×3
1.0e+03 * 0.1000 0 4.5000 0 0.0010 0.0383 0.0010 0.0010 0.0382
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
s = num2str(M,3); % create a character array that represents the numeric values in "M" with 3 significant digits
T = str2num(s); % convert "s" back into a numeric matrix.
writematrix(T,'myFile.txt','Delimiter',' ');
type myFile.txt
100 0 4500 0 1 38.3 1 1 38.2

Melden Sie sich an, um zu kommentieren.

Produkte


Version

R2023b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by