writematrix: how to get formatted txt-output?

11 ビュー (過去 30 日間)
JarryG
JarryG 2024 年 9 月 24 日
コメント済み: Stephen23 2024 年 9 月 24 日
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?

回答 (3 件)

Stephen23
Stephen23 2024 年 9 月 24 日
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 2024 年 9 月 24 日
編集済み: Aquatris 2024 年 9 月 24 日
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 2024 年 9 月 24 日
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 件のコメント
Stephen23
Stephen23 2024 年 9 月 24 日
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

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeText Files についてさらに検索

タグ

製品


リリース

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by