Write a tabbed matrix in a txt file

7 vues (au cours des 30 derniers jours)
Francesco Cattaneo
Francesco Cattaneo le 30 Avr 2021
Commenté : dpb le 2 Mai 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

Réponse acceptée

dpb
dpb le 30 Avr 2021
Modifié(e) : dpb le 30 Avr 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 commentaires
Francesco Cattaneo
Francesco Cattaneo le 2 Mai 2021
Modifié(e) : Francesco Cattaneo le 2 Mai 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 le 2 Mai 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.

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

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

Start Hunting!

Translated by