Writing Matlab Table to File

18 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 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!