Merging Multiple text files

48 views (last 30 days)
Robert
Robert on 27 May 2015
Edited: Stephen23 on 18 Apr 2021
I have 1505 text files, each 96x6. I want to be able to merge them such that file 2 is below file 1, file 3 is below file 2 etc all in the same text file.
I was previously given this code
files=dir('*.txt');
fileout='merged.txt';
fout=fopen(fileout,'w');
for cntfiles=1:length(files)
fin=fopen(files(cntfiles).name);
while ~feof(fin)
fprintf(fout,'%s %d\n',fgetl(fin),cntfiles);
end
fclose(fin);
end
fclose(fout);
At first it seemed to work but I found it jumbles the data a bit and I cannot use it.
Are there any alternatives?

Accepted Answer

Stephen23
Stephen23 on 27 May 2015
Edited: Stephen23 on 18 Apr 2021
I had exactly the same issue, and solved it by writing a function called natsortfiles to sort file-names into order based on their number values (not just ASCII order). You can get it here:
S = natsortfiles(dir(..));
You can use it with your code by doing something like this (outline only):
S = dir('*.txt');
S = natsortfiles(S); % alphanumeric sort by filename
for k = 1:numel(S)
fid = fopen(S(k).name,'rt');
... code here
fclose(fid);
end

More Answers (2)

Joseph Cheng
Joseph Cheng on 27 May 2015
Since you're just doing a complete copy and paste of the text files just read it in as binary and write it all. I had to put a \n after writing all the data for each file as i didn't have one at the last line of my file. Such that it would merge the last line of previous file with the first line of the current file.
files=dir('txt*.txt'); %additional filter so i didn't read in my merged file
fileout='merged.txt';
fout=fopen(fileout,'w');
for cntfiles=1:length(files)
fin=fopen(files(cntfiles).name);
temp = fread(fin,'uint8');
fwrite(fout,temp,'uint8');
fprintf(fout,'\n');
fclose(fin);
end
fclose(fout);
  4 Comments
Joseph Cheng
Joseph Cheng on 27 May 2015
Ahh i misunderstood what you were saying about jumbling of data.
Astik Sachan
Astik Sachan on 8 Aug 2019
Follow below answer for the sorting of the files based on Name or Time or any other File Information

Sign in to comment.


Shreenath Krishnamurthy
Shreenath Krishnamurthy on 5 Aug 2019
I have a follow up question on this thread. I am using the code given above by Robert to merge multiple text files in a directory. I want to have one single file that writes the 1st created file as first 2nd created file as 2nd data and so on ?

Products

Community Treasure Hunt

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

Start Hunting!