Writing Matlab Table to File

72 views (last 30 days)
Paschalis Economou
Paschalis Economou on 27 Dec 2020
Answered: Jeff Miller on 27 Sep 2023
I am trying to find an easy way to print nicely-formatted tables to a text file. By "nicely-formatted," I mean the way that tables are displayed in the console (with spacing and column headers; see the example below). I was hoping 'fprintf' would do the trick, but this gives me an error. Surely there has to be a way?
>> names = ["Column 1", "Column 2"];
>> S = table([0; 1; 2; 3], [6; 4; 3; 7], 'VariableNames', names);
>> disp(S);
Column 1 Column 2
________ ________
0 6
1 4
2 3
3 7
>> file = fopen("newfile.txt", 'w');
>> fprintf(file, S);
Error using fprintf
Invalid format.
Note: There is a function 'writeTable,' but that produces raw data files (eg. comma delimited files), which isn't what I want.

Answers (2)

Ive J
Ive J on 27 Dec 2020
Edited: Ive J on 27 Dec 2020
First of all, you are using fprintf incorrectly, and thankfully all MATLAB errors are quite intuitive. This one tells you, you've forgotten to define a format for fprintf. For more info, see the function help.
Next, you've also missed to read writetable help; otherwise you would figure it out that the function allows you to set the delimiter.
S = table([0; 1; 2; 3], [6; 4; 3; 7], 'VariableNames', {'col1', 'col2'});
% write to a tab delimited file
writetable(S, 'newfile.txt', 'delimiter', '\t')
% check it
type newfile.txt
col1 col2
0 6
1 4
2 3
3 7
% read it again in MATLBA
Snew = readtable('newfile.txt')
col1 col2
____ ____
0 6
1 4
2 3
3 7
  1 Comment
Paschalis Economou
Paschalis Economou on 27 Dec 2020
Thanks for your response. I didn't think about using a tab-delimited file. However, it still isn't quite what I wanted. The display in the Matlab console has the columns centred, and a line separating the column headers from their contents. Obviously I could write a function to do all of that, but I was wondering if there was any easy way to just take the format displayed in the console, and print that directly to a file.

Sign in to comment.


Jeff Miller
Jeff Miller on 27 Sep 2023
Try this:
str = formattedDisplayText(S);
str = erase(str,"<strong>");
str = erase(str,"</strong>");
fprintf(file,"%s",str);

Categories

Find more on Tables 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!