write multiple line of text into a text file

Simple question; I have this variable which I want easily write to a text file (it can be a hundred of lines, I just cut it into 4 to fit here)
app.DCMtxt.Value
ans =
4×1 cell array
'3 Message(s) transmitted '
''
' ws BUS ID Rx Node DLC Cycle Extended'
' ______ ___ ____ __ ____ ___ _____ ________'

4 commentaires

per isakson
per isakson le 3 Août 2017
Modifié(e) : per isakson le 3 Août 2017
"easily write to a text file" Does this qualify as easy?
len = size( app.DCMtxt.Value, 1 );
fid = fopen('output.txt','w');
for jj = 1 : len
fprintf( fid, '%\s\n', app.DCMtxt.Value{jj,1} );
end
fclose(fid);
Rik
Rik le 4 Août 2017
Of course, you should make sure your cell is indeed (n x 1). For other cases you need to think what you want to do with the extra cols.
Ali
Ali le 4 Août 2017
Modifié(e) : Ali le 4 Août 2017
Thanks for the replies. Per, it does not write to the file. I also get: Warning: Escaped character '\s' is not valid. See 'doc sprintf' for supported special characters. I see it reads it line by line, nice!
looks like Per's answer had a typo and otherwise working well, so I'm reposting it with minor change as an answer
fid = fopen('output.txt','w');
for jj = 1 : size( app.DCMtxt.Value, 1 )
fprintf( fid, '%s\n', app.DCMtxt.Value{jj,1} );
end
fclose(fid);

Connectez-vous pour commenter.

 Réponse acceptée

fid = fopen('output.txt','w');
fprintf(fid, '%s\n',app.DCMtxt.Value{:}) ;
fclose(fid) ;

4 commentaires

Stephen23
Stephen23 le 4 Août 2017
Modifié(e) : Stephen23 le 4 Août 2017
+1. Tip for windows users: use 'wt' instead of 'w'.
Jan
Jan le 4 Août 2017
@Stephen: Even under Windows 'w' works perfectly. Only the Notepad shipped with Windows has problem with displaying non-DOS linebreaks. Use e.g. Notepad++, WordPad or Matlab's editor instead. M-files use \n instead of \r\n for more than 10 years now, even under Windows.
You might need to replace the control characters:
escaped_cellstr=app.DCMtxt.Value;
escaped_cellstr=strrep(escaped_cellstr,'%','%%');
escaped_cellstr=strrep(escaped_cellstr,'/','//');
fid = fopen('output.txt','w');
fprintf(fid, '%s\n',escaped_cellstr) ;
fclose(fid) ;
No, Rik, that is not needed. That would only be needed if you were using the string content inside the format. For example, the following would be a problem:
fid = fopen('output.txt','w');
for jj = 1 : size( app.DCMtxt.Value, 1 )
fprintf( fid, app.DCMtxt.Value{jj,1} );
fprintf( fid, '\n' );
end
fclose(fid);

Connectez-vous pour commenter.

Plus de réponses (1)

Will Wilson
Will Wilson le 4 Août 2017
If you didn't want to use a for loop directly you could use a newer datatype called a table and one if it's helper functions to get the job done. Here is an example:
% Convert your [m x 1] cell array into a MATLAB table.
data = cell2table(app.DCMtxt.Value);
% (Optionally) name the column in your table.
data.Properties.VariableNames = {'DataSet'};
% Write the table out to a text file.
writetable(data,'OutputData');
This should do the trick. Ultimately it will depend on how much control you need on the text file you write out.

Catégories

En savoir plus sur Characters and Strings dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by