how to combine text files using load function?

2 Ansichten (letzte 30 Tage)
Hyo Wan Park
Hyo Wan Park am 4 Okt. 2018
Beantwortet: Raghunandan V am 5 Okt. 2018
i want to combine A,B,C files into one file.
But i faced error , Error using horzcat Dimensions of arrays being concatenated are not consistent.
this is my code
%put files to combine
File = {file_name_1, file_name_2,file_name_3};
A = [];
for index = 1 : numOfFile
newA = load(File{index});
A = [A newA];
end
% save final output
save('outputFile.txt', 'A')
  4 Kommentare
Hyo Wan Park
Hyo Wan Park am 4 Okt. 2018
combinedata = [combinedata;thisdata];
this line happens same error.
Kevin Chng
Kevin Chng am 4 Okt. 2018
Walter's Roberson mentioned that it might have error due to different number of columns.
Do you mind provide few of your files for me to try out?

Melden Sie sich an, um zu kommentieren.

Antworten (2)

Walter Roberson
Walter Roberson am 5 Okt. 2018
The below code assumes the files are to be put side by side, and assumes that the number of rows in the files might be different. The number of columns in each file does not need to be the same at all. Shorter rows are padded with the value of your choice.
pad_value = nan; %change to 0 if you want padding by 0
%put files to combine
File = {file_name_1, file_name_2,file_name_3};
for index = 1 : numOfFile
newA = load(File{index});
if ndims(newA) > 2
error('File "%s" has more than 2 dimensions', File{index});
end
if index == 1
A = newA;
else
[or, oc] = size(A);
[nr, nc] = size(newA);
if nr > or %new file has more rows than any previous file
A(or+1:nr, :) = pad_value;
or = nr;
end
if nr < or %new file has fewer rows than some previous file
newA(nr+1:or, :) = pad_value;
nr = or;
end
A(:, end+1:end+nc) = newA;
end
end
% save final output
save('outputFile.txt', 'A', '-ascii', '-double')
The logic would be much the same for the case of putting the files under each other but not assuming that the number of columns are the same.

Raghunandan V
Raghunandan V am 5 Okt. 2018
Since you are trying to do in arrays you are not able to concancate You should try it using cell arrays. something like this
fileName={'new1.txt', 'new2.txt', 'new3.txt'};
%open file identifier
fid=fopen('MyFile.txt','w')
for k=1:length(fileName)
%read the file name as string including delimiters and next lines
List=textread(fileName{1,k},'%s','delimiter','\n');
%arrange them in order of k if you want in a cell array
FinalList{k,1}=List;
%or print them into a file.
fprintf(fid, [cell2mat(List) '\n']);
end
%close file indentifier
fclose(fid)

Community Treasure Hunt

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

Start Hunting!

Translated by