Using fprintf to print in text file

33 views (last 30 days)
Hi all,
I'm very very unfamiliar with MATLAB. I've been trying to write a code that can neatly organize the data that is stored in certain variables into a text file.
What I want the final product to look like is this:
Each column is stored in separate variables (e.g. nodeID=[1;2;3;4], X=[0;0;120;120], etc)
I've been trying to use frpintf function and got to where there is a breakline between the column titles and the numbers.
I'd like to know how to evenly space these numbers as shown in the picture. Currently I've been adding spaces (using ' ') via fprintf but this gives me something that looks like below:
the code i have is the following (it's embarrassing really):
here nNode = 4,
for i = 1:nNode
fprintf(txt,'\n');
fprintf(txt, '%d', nodeID(i));
fprintf(txt, ' ');
fprintf(txt, '%.2f', X(i));
fprintf(txt, ' ');
fprintf(txt, '%.2f', Y(i));
fprintf(txt, ' ');
fprintf(txt, '%.3f', fx(i));
fprintf(txt, ' ');
fprintf(txt, '%.3f', fy(i));
end
Is there a more efficient way to go about this issue?
Thanks a bunch :)
  2 Comments
Image Analyst
Image Analyst on 22 Sep 2019
txt is the name of the file handle, right? That's probably a bad name for it since we might think it's a text string.
So you did
txt = fopen('Nodal Data.txt', 'wt');
before any of the code you're showing, right? Personally I'd use fid, fileID, or fileHandle as the handle to the file - it's a more descriptive name.
Sung Yeob Lim
Sung Yeob Lim on 22 Sep 2019
Edited: Sung Yeob Lim on 22 Sep 2019
this is what i wrote
txt = fopen('output.txt','wt','n');
And thanks for the tip! I'll change it to fid :)

Sign in to comment.

Accepted Answer

Athul Prakash
Athul Prakash on 25 Sep 2019
Edited: Athul Prakash on 25 Sep 2019
Hey Sung,
Instead of printing a fixed number of spaces with ' ', you may set the total width of your value in the format string like this:
sprintf('%10.2f %10.2f', 120, 120) %Each value of 120 is displayed with total width 10 and precision 2.
Use '%w.2f' to set the width of the display value to 'w', which would fill in empty spaces as required.
This would align values in a column on the rightmost digit.
[I used 'w' to illustrate only. You can't use a variable this way, you will need to replace 'w' with your required number, say '%15.2f' or '%20.2f']
[sprintf and fprintf both work the same way, I used sprintf just to demonstrate]
Hope it helps!

More Answers (0)

Categories

Find more on Data Type Identification in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!