I am trying to write my data to a text file but the usual \n is not giving me a new line!
fid1 = fopen(filedesignation,'w');
fprintf(fid1,'%s, ',title1);
fprintf(fid1,'%4.2f, %4.2f, %4.2f, %4.2f, %4.2f\n',DataMatrix);
fclose(fid1);
When I try printing this to the command window, the \n works, but not when I try and write to a file. Why?!
How can I get a line return in my text file if this doesn't work?

댓글 수: 6

The simplest solution is to open the file in text mode:
fid1 = fopen(filedesignation,'wt');
^ you need this!
On Windows this will automatically convert all \n to the required newlines characters.
Mohammad Bhat
Mohammad Bhat 2018년 2월 25일
That helped me too, thanks ...
Shahrokh Abbasi-Rad
Shahrokh Abbasi-Rad 2018년 9월 7일
Awesome. the problem was only a 't' :))))
Fernando Rojano
Fernando Rojano 2019년 4월 6일
Great!
Priya Mittal
Priya Mittal 2019년 9월 4일
Change the 'w' parameter in fopen to 'wt'. Worked for me.
Jan
Jan 2019년 9월 4일
Fortunately even NotePad shipped with modern Windows 10 is able to display \n correctly now.

댓글을 달려면 로그인하십시오.

 채택된 답변

Jan
Jan 2013년 8월 8일

7 개 추천

It works perfectly when you write it to a file also. But the Windows NotePad ("Editor" in German) fails to display the linebreaks correctly. But Matlab's editor, Word, NotePad++, WordPad, (X)Emacs (under Linux and Windows), Alpha (on MacOS-9 !), BBEdit, vi, etc. display the \n line break correctly even without the \r.
When you open the file in the 'wt' mode, \n is converted to \r\n automatically, but this can have certain unexpected side effects. E.g. the number of characters obtained by ftell can differ from the number of bytes the file has. Reading by fgets will be slower, because all control characters are considered on the fly, e.g. backspaces and ^Z as end-of-file. In addition the created results differ between Windows and Linux. So I'd prefer to retire NotePad, install NotePad++ or WordPad as standard viewer of txt files and prefer the \n linebreaks as Matlab's editor does for several years now.

댓글 수: 1

Evangelos Stefanidis
Evangelos Stefanidis 2019년 5월 6일
Thank you Jan, I had totally forgot about Notepad++ ! Also Thank you Katie for asking this question, I had hard time for a while and I was only opening the .txt files with my results through matlab... lol.

댓글을 달려면 로그인하십시오.

추가 답변 (5개)

Cedric
Cedric 2013년 8월 7일

10 개 추천

You will need \r\n for producing a carriage return and a new line. This is a well documented issue between UNIX-based and Windows operating systems.

댓글 수: 3

Yang Hu
Yang Hu 2018년 11월 30일
Brilliant
Keqin Xu
Keqin Xu 2019년 1월 11일
Files created this way cannot be properly read using ...'deliminator','\n'...
An example is attached.
the success is going to depend on which command you are passing that parameter to and potentially on how you open the file.
Generally telling a function that the delimiter is \n is an interface contract: you are making a promise about the file and the function is permitted to take you at your word.
My guess looking at that file is that you would use
parts = regexp( fileread('Run_01.txt'), '\r?\n', 'split');
if isempty(parts{end})
parts(end) = [];
end
that will work whether the file has cr lf or lf only. It will not work for cr only though. This code will not remove interior empty lines. The if at the bottom is to handle the fact that if the file ends in newline then the split process thinks that there is an empty line after it. Files are permitted to either just end without a newline or else to end in a newline (that is to say that there is no standard as to whether newline is a line separator or else a line terminator .)

댓글을 달려면 로그인하십시오.

Camilo Rocha
Camilo Rocha 2019년 4월 25일

4 개 추천

You just have to put 'wt' when you call fopen function
fid1 = fopen(filename,'wt')
Roxanne de la Garza
Roxanne de la Garza 2018년 2월 3일

1 개 추천

I put my \n at the beginning instead of the end and it worked for me. fprintf(fid1,'\n %4.2f, %4.2f, %4.2f, %4.2f, %4.2f',DataMatrix);

댓글 수: 2

Matthes Müller
Matthes Müller 2018년 2월 7일
Worked for me also, thank you so much!
ustin yanu
ustin yanu 2020년 4월 6일
편집: ustin yanu 2020년 4월 6일
worked for me too, thx, wonder why?
i have this
elseif x<1300
a=x-1200;
b = [ fix(a/1e+2)-1E+2*fix(a/1e+4) rem(a, 1e+2)];
fprintf('\nYou entered %d:%d%d',b)
fprintf('\nThe equivalent time based on a 12-hour clock is %d:%d%d',b)
disp('PM')

댓글을 달려면 로그인하십시오.

Aasim
Aasim 2013년 11월 13일

0 개 추천

Works well.. Thanks!
Milad Hasani
Milad Hasani 2022년 8월 22일

0 개 추천

As a suggestion, you can use:
\newline

댓글 수: 1

\newline is for Latex, and will not work for fprintf() or sprintf()
fprintf('abc\newlinedef')
abc ewlinedef

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Environment and Settings에 대해 자세히 알아보기

질문:

2013년 8월 7일

댓글:

2022년 8월 23일

Community Treasure Hunt

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

Start Hunting!

Translated by