how to combine text files using load function?

2 ビュー (過去 30 日間)
Hyo Wan Park
Hyo Wan Park 2018 年 10 月 4 日
回答済み: Raghunandan V 2018 年 10 月 5 日
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 件のコメント
Hyo Wan Park
Hyo Wan Park 2018 年 10 月 4 日
combinedata = [combinedata;thisdata];
this line happens same error.
Kevin Chng
Kevin Chng 2018 年 10 月 4 日
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?

サインインしてコメントする。

回答 (2 件)

Walter Roberson
Walter Roberson 2018 年 10 月 5 日
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 2018 年 10 月 5 日
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)

カテゴリ

Help Center および File ExchangeString Parsing についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by