Write a tabbed matrix in a txt file

7 views (last 30 days)
Francesco Cattaneo
Francesco Cattaneo on 30 Apr 2021
Commented: dpb on 2 May 2021
Hi everyone,
I need to write a numeric matrix in a text file, in such a way that each row is indented at the beginning.
Let's say I want a header and a matrix written below:
clear all
clc
A = [2 4 ; 5 3 ; 9 6 ; 6 4 ; 8 8];
test = fullfile("test");
[fid, error] = fopen(test, 'w');
fprintf(fid, "############\n");
dlmwrite(test, A, 'delimiter',"\t", '-append');
fclose(fid);
I would obtain a file "test" with:
############
2 4
5 3
9 6
6 4
8 8
Is there a way to write "test" like this?
############
2 4
5 3
9 6
6 4
8 8
Thank you for any kind of help

Accepted Answer

dpb
dpb on 30 Apr 2021
Edited: dpb on 30 Apr 2021
Read the rest of the documentation for dlmwrite --
Name-Value Pair Arguments
...
'precision' — Numeric precision
(default) | scalar | C-style format specifier | character vector
dlmwrite(test, A, 'delimiter',"\t",'precision','%3d','-append')
Salt to suit...limitation is same format string for all variables; if you want/need more control, use fprintf and whatever formatting string you desire.
NB: dlmwrite is also deprecated in favor of writematrix beginning in R2019b, but the latter fails to provide the ability to specify a format string; you get whatever the 'long g' format returns for the given numeric data and so is not suitable replacement in terms of all functionality if must control the format.
  6 Comments
Francesco Cattaneo
Francesco Cattaneo on 2 May 2021
Edited: Francesco Cattaneo on 2 May 2021
Yes, I probably wasn't very clear at first. Basically I was interested that the whole matrix was indented equally on the left with tabs and that significant figures are not lost, the rest is more: if the columns remain aligned, so much better for readability, but if a row has to remain offset further to the right because a value, with all its significant digits results in a very long string, that's okay. Again for a pure question of "cleanliness" if too many useless zeros are avoided it is better, otherwise it is the same. Now, without going into too much details, I seem to understand that, with values with at most 5 or 6 significant digits after the decimal point, a long g format can be a good choice for not losing data, having columns readable and sufficiently, but not strictly, aligned. What I have to do is just extrapolate some data from an external text file, stack them according to a precise criterion and then export other N text files, the really important thing is that no data information is lost and that they are indented on the left so that output files can be read by a sw, the rest is meticulousness. In any case, thank you very much for the precious clarifications, I'll think about them more thoroughly.
dpb
dpb on 2 May 2021
Well, you can do both if you add the width and precision...I didn't show; thought it would be evident
>> fprintf('%20.15g\t%20.15g\n',A.')
240.14 0.0031567
5 3
3.14159265358979 6
6 4
8 3.14159265358979e-08
>>
The file is then bigger thatn with just the '%.15g' because the alignment requires blank fill that you don't have with the variable field width.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!