how to read n first lines of a txt file and keep the format when writing the read data to the new (another) text file

78 visualizaciones (últimos 30 días)
Hi MATLAB folks,
I have a long .txt file which each line of that has its own specific format, e.g.
contents of a sample text file
created on Sept. 21, 2012
no. day month year
1 Sat Jan 2012
2 Mon Sept 2001
Now, I am looking for a way to read its, let say 4 lines, and keep the format of these lines when I am writing this data into other text file so that I end up with:
contents of a sample text file
created on Sept. 21, 2012
no. day month year
in my new .txt file.
Is there any suggestion?
Many thanks in advance, -V

Respuesta aceptada

José-Luis
José-Luis el 21 de Sept. de 2012
Editada: José-Luis el 21 de Sept. de 2012
To read into a cell array, line by line:
fid = fopen(your_filename,'r');
numLines = 4;
your_text = cell(numLines,1);
for ii = 1:numLines
your_text(ii) = {fgetl(fid)};
end
fclose(fid);
And now to save:
fid = fopen('your_file.txt','w');
for ii = 1:numLines
fprintf(fid,'%s\n',your_text{ii})
end
fclose(fis)
your_first_value = fscanf(fid,'%d',1);
fclose(fid);
Note that the return of carriage will be '\r\n' in Windows instead of just '\n'.
  1 comentario
Gabriele Giardino
Gabriele Giardino el 11 de Abr. de 2019
I would like to say that this way is really powerful!
I tried to fetch data from the file and to copy them in the same loop, let's say:
% ... Previous code to open fid and fid_down files
% Copying downsampled values
fseek(fid, 0, 'bof');
for idxData = 1:length(idxDownSample)
fseek(fid, 0, 'bof');
currLineData = textscan(fid, '%s', 1, 'delimiter', '\n', 'headerlines', idxDownSample(idxData)-1, 'whitespace', '');
fprintf(fid_down, '%s\n', currLineData{1,1}{1,1});
end
% Adding the **END at the end of the file
fprintf(fid_down, '\n');
fprintf(fid_down, '**END');
% Closing files
fclose(fid_down);
fclose(fid);
But it was really slow while creating the new file fid_down (4-5 kB/s)!
Your solution is different about storing data in MATLAB and then copying them, as in this way:
% QUICK WAY
% Copying downsampled values
fseek(fid, pointMeas, 'bof');
content = cell(length(idxDownSample), 1);
for idxData = 1:length(idxDownSample)
content(idxData) = {fgetl(fid)};
for idxSkipVal = 1:rate-1
fgetl(fid);
end
end
fclose(fid);
for idxData = 1:length(idxDownSample)
fprintf(fid_down, '%s\n', content{idxData});
end
% Adding the **END at the end of the file
fprintf(fid_down, '\n');
fprintf(fid_down, '**END');
% Closing files
fclose(fid_down);
And this way is fat quicker than the previous!
Probably MATLB messes up when it has to switch between opened files, becoming slower when fetching data to copy in other files.
I hope this can be useful for who has tried as me to fetch and copy at the same time between 2 different files

Iniciar sesión para comentar.

Más respuestas (1)

Azzi Abdelmalek
Azzi Abdelmalek el 21 de Sept. de 2012
Editada: Azzi Abdelmalek el 21 de Sept. de 2012
fid = fopen('file.txt');
tline = fgetl(fid);
out=tline
while ischar(tline)
tline = fgetl(fid);
out=char(out,tline)
end
fclose(fid);

Categorías

Más información sobre Text Data Preparation 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!

Translated by