Need help with reading few row of my data and saving it in a new txt file

2 views (last 30 days)
I have 1*1 matrix. Its a big file of 6MB. I want to read few row and save those data in a new .txt file. I was trying this code
for i=0:1;
M=[num2str(1+i),'.txt'];
data1=dlmread(M);
t1=data1(0:80000);
fnamec=[num2str(1+i), 'xm.txt'];
dlmwrite(fnamec,t1);
end
getting error ??? Error using ==> dlmread at 145
Out of memory. Type HELP MEMORY for your options.
Error in ==> textread at 3
data1=dlmread(M);
Please help me with a code that will help me do the work Thanks for your time

Accepted Answer

dpb
dpb on 9 Oct 2013
Edited: dpb on 9 Oct 2013
Probably simplest to copy a few lines from A to B is to just use fgets() --
SOTOO (NB: aircode...)
fid1=fopen('yourinputfile','r');
fid2=fopen('youroutputfile','w');
N=input('How many lines to copy?');
for idx=1:N
fprintf(fid2,'%s',fgets(fid1));
end
fclose('all')
  4 Comments
sudipta
sudipta on 20 Oct 2013
Edited: sudipta on 20 Oct 2013
I have tried the following according to your suggestion and worked, will try 2nd one also and update
fid1=fopen('x','r');
fid2=fopen('a','w');
fid3=fopen('b','w');
N=10;
for idx=1:N
fprintf(fid2,'%s',fgets(fid1));
end
M=20;
for idy=N:M
fprintf(fid3,'%s',fgets(fid1));
end
fclose('all');
dpb
dpb on 20 Oct 2013
The above writes two files which may be the intent; if otoh, the idea is to just not write the first N lines then
for idx=1:N
fgetl(fid1);
end
M=20;
for idx=1:M
fprintf(fid2,'%s',fgets(fid1));
end
Will do. Also NB in your solution that you're not actually doing M additional lines after the first N; you're doing M-N+1. If, for example, you asked to skip 10 and write the following 3 your second loop wouldn't execute at all... (exercise for student--why?)

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!