Merging Multiple text files

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?

 Risposta accettata

Stephen23
Stephen23 il 27 Mag 2015
Modificato: Stephen23 il 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

Più risposte (2)

Joseph Cheng
Joseph Cheng il 27 Mag 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 Commenti

Robert
Robert il 27 Mag 2015
Thanks for your answer, but the code wasn;t the problem. The data was being jumbled because it was reading it out of order e.g. x1, x10, x100, x1000 rather than x1,x2,x3,x4.
So now I have a new question; How can I solve this? Do I need to rename all of the text files or something? If so what to? Is there and easier way??
Joseph Cheng
Joseph Cheng il 27 Mag 2015
Ahh i misunderstood what you were saying about jumbling of data.
Follow below answer for the sorting of the files based on Name or Time or any other File Information

Accedi per commentare.

Shreenath Krishnamurthy
Shreenath Krishnamurthy il 5 Ago 2019

0 voti

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 ?

Categorie

Prodotti

Richiesto:

il 27 Mag 2015

Modificato:

il 18 Apr 2021

Community Treasure Hunt

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

Start Hunting!

Translated by