Matlab Issue with aligning text in table format in .txt file

Click For Summary
The discussion focuses on a MATLAB issue regarding the alignment of text in a table format when writing to a .txt file. The user is attempting to output a matrix and a cell array of names but is experiencing misalignment due to incorrect conversion specifiers in the fprintf function. It is suggested that using %d for integer data instead of %f would be more appropriate, as well as clarifying the function of the width specifier in formatting. The current specifiers lead to increasing spacing between numbers, causing misalignment. Properly adjusting the conversion specifiers will resolve the alignment issue in the output file.
muaaman
Messages
4
Reaction score
0

Homework Statement


uData is a 30x5 matrix with numbers. name_Database is a 30x1 cell array with strings of Names (e.g. Fake Subject 1, Fake Subject 2, Bob). What would fix the code so that the data aligns? (please see image for the misalignment).

unaligned-table_txtfile.png

Homework Equations

The Attempt at a Solution


[/B]

Code:
ID = dbedit.uData(:,1);
scE = dbedit.uData(:,2);
ccE = dbedit.uData(:,3);
scC = dbedit.uData(:,4);
ccC = dbedit.uData(:,5);
names = dbedit.name_Database;
% Text file to output data into is called uDatabase.txt file.
output_file = 'uDatabase.txt';
% Open file for writing
fid = fopen(output_file, 'w+');
% Header
fprintf(fid, '%6s %12s %18s %24s %30s %36s\n', 'Name', 'ID', 'scE',...
    'ccE', 'scC', 'ccC');
% Write the data.
for ii=1:numel(names)
    fprintf(fid, '%6s %12.0f %18.0f %24.0f %30.0f %36.0f\n',names{ii},...
    ID(ii),scE(ii),ccE(ii),scC(ii),...
    ccC(ii));
end
% Close the .txt file.
fclose(fid);
 
Physics news on Phys.org
It looks to me like most of the data you are printing to the file is integer data, so I would be using %d conversion specifiers in place of the %f conversion specifiers you are using.

Also, I think you have a misconception about what the number in a conversion specifier such as %18.0f does. This does NOT start printing in column 18. What it does is print the floating point number in a field of width 18, with no digits to the right of the decimal point. Because your conversion specifiers are %6s %12s %18s and so on, you get ever increasing spacing between subsequent numbers. The link below discusses how to use conversion specifiers to format strings or number sent to the screen or to a file.

http://www.mathworks.com/help/matlab/matlab_prog/formatting-strings.html
 

Similar threads

  • · Replies 1 ·
Replies
1
Views
3K