How to read data from a file into cell array keeping indents undisturbed
4 次查看(过去 30 天)
显示 更早的评论
I am trying to read a data from a file, modify it and write to a same file which I did using,
fid = fopen('file.ext','r');
fclose(fid);
lines = textscan(fid,'%s','Delimiter','\n');
...
fid = fopen('file.ext','w');
for row = 1:length(lines{1})
fprintf(fid,'%s\n',lines{1}{row});
end
fclose(fid);
But I could not reproduce the indents which were in the original file. So any suggestions to achieve this and make the above process easier?
Note: the file extension is not .txt but similar to text format. The data which I try to read has html tag elements and attributes.
I would also like to know whether there is any way to directly modify a file without reading it?
Thanks in advance!
2 个评论
Jan
2020-9-27
If you close the file by fclose before running textscan, the code should fail with an error message.
采纳的回答
Jan
2020-9-27
编辑:Jan
2020-9-27
% Import file:
Str = fileread('file.ext');
% Remove trailing line break to avoid appending an additional empty line:
if ~isempty(Str) && Str(numel(Str)) == char(10)
Str(numel(Str)) = [];
end
% Split lines:
% lines = strsplit(Str, char(10));
% Faster but uglier (this is what happens inside STRSPLIT):
lines = regexp(Str, ['(?:', char(10), ')+'], 'split');
...
% Write output:
fid = fopen('file.ext', 'w');
fprintf(fid, '%s\n', lines{:});
fclose(fid);
更多回答(1 个)
Rik
2020-9-27
It will read a file to a cell array, one cell element per line, and it will preserve all leading and trailing spaces.
One of the advantages of a cell array is that you can trivially write out the modified file: fprintf(fid,'%s\n',txt{:}).
3 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Data Import and Export 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!