How do you write to a fopen text file without deleting previous text?
61 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Recap
el 2 de Abr. de 2016
Comentada: Image Analyst
el 12 de Oct. de 2021
I'm writing the results of my program to a text file. But every time I run the program and open the text file using fopen, it overwrites everything that was previously written in that file. What can I do to prevent it overwriting the previous text?
Im opening the file using
fileID = fopen('myfile.txt','r+');
and writing to it
fprintf(fileID,'%d',Number(num));
0 comentarios
Respuesta aceptada
Image Analyst
el 2 de Abr. de 2016
Open two separate files. Then write the output file. Afterwards, you can delete the input file and rename the output file if you want.
fInput = fopen(inputFileName, 'rt');
fOutput = fopen(outputFileName, 'wt');
% Now read from input file and write to output file
thisLine = fgetl(fInput);
fprintf(fOutput........
% All done. Close both files.
fclose(fInput);
fclose(fOutput);
% Now delete and/or rename any files you want.
2 comentarios
VBBV
el 12 de Oct. de 2021
If I want to replace a specific text string in a file that's filled with both numeric and text data. Will the above solution work ? I want to write to new file with all the data in old file but the specfic text string replaced.
Image Analyst
el 12 de Oct. de 2021
You could do
% Open the file for reading in text mode.
fInput = fopen(inputFileName, 'rt');
% Open the file for writing in text mode.
fOutput = fopen(outputFileName, 'wt');
% Now read from input file and write to output file
% Read the first line of the file.
textLine = fgetl(fileID);
lineCounter = 1;
strPattern = 'This is the line I want to replace'; % Adapt as needed.
while ischar(textLine)
% Print out what line we're operating on.
fprintf('%s\n', textLine);
% Read the next line.
textLine = fgetl(fileID);
lineCounter = lineCounter + 1;
if strcmpi(textLine, strPattern)
% We found the string we're looking for.
% Replace it with what we want.
textLine = 'This is my new Line.'; % Adapt as needed.
end
fprintf(fOutput, '%s', textLine);
end
% All done. Close both files.
fclose(fInput);
Or you could more compactly use fileread() and strrep().
inputString = fileread(inputFileName);
newString = strrep(inputString, oldPattern, newPattern)
% Open the file for writing in text mode.
fOutput = fopen(outputFileName, 'wt');
fprintf(fOutput, '%s', newString);
fclose(fOutput);
I haven't tested either - they're just off the top of my head.
Más respuestas (2)
Stephen23
el 2 de Abr. de 2016
Simply use the append option a:
fileID = fopen('myfile.txt','a+');
That is it.
1 comentario
Image Analyst
el 2 de Abr. de 2016
He never mentioned append, but I think you might be right. If only he had mentioned that at first....
Muhammad Usman Saleem
el 2 de Abr. de 2016
Editada: Muhammad Usman Saleem
el 2 de Abr. de 2016
change this line to
fileID = fopen('myfile.txt','w'); % opening for writing only
r+ for both reading and writing. Which change previous content
5 comentarios
Muhammad Usman Saleem
el 2 de Abr. de 2016
Editada: Muhammad Usman Saleem
el 2 de Abr. de 2016
what is your matrix Number? how can it contains string? I am supperise to know matrix with string and numeric?
Ver también
Categorías
Más información sobre Text Files en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!