Write a tabbed matrix in a txt file

7 visualizzazioni (ultimi 30 giorni)
Francesco Cattaneo
Francesco Cattaneo il 30 Apr 2021
Commentato: dpb il 2 Mag 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

Risposta accettata

dpb
dpb il 30 Apr 2021
Modificato: dpb il 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 Commenti
Francesco Cattaneo
Francesco Cattaneo il 2 Mag 2021
Modificato: Francesco Cattaneo il 2 Mag 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 il 2 Mag 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.

Accedi per commentare.

Più risposte (0)

Community Treasure Hunt

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

Start Hunting!

Translated by