Jes*_*ssy 6 format file-io matlab file text-files
我有3个txt文件s1.txt, s2.txt, s3.txt.每个都有相同的格式和数量的数据.我想只将3个文件中每个文件的第二列合并为一个文件.在我合并数据之前,我根据第1列对其进行了排序:
UnSorted文件:s1.txt s2.txt s3.txt
1 23 2 33 3 22
4 32 4 32 2 11
5 22 1 10 5 28
2 55 8 11 7 11
Run Code Online (Sandbox Code Playgroud)
排序文件:s1.txt s2.txt s3.txt
1 23 1 10 2 11
2 55 2 33 3 22
4 32 4 32 5 28
5 22 8 11 7 11
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止的代码:
BaseFile ='s'
n=3
fid=fopen('RT.txt','w');
for i=1:n
%Open each file consecutively
d(i)=fopen([BaseFile num2str(i)'.txt']);
%read data from file
A=textscan(d(i),'%f%f')
a=A{1}
b=A{2}
ab=[a,b];
%sort the data according to the 1st column
B=sortrows(ab,1);
%delete the 1st column after being sorted
B(:,1)=[]
%write to a new file
fprintf(fid,'%d\n',B');
%close (d(i));
end
fclose(fid);
Run Code Online (Sandbox Code Playgroud)
如何以这种格式获取新txt文件中的输出?
23 10 11
55 33 22
32 32 28
22 11 11
Run Code Online (Sandbox Code Playgroud)
而不是这种格式?
23
55
32
22
10
33
32
11
11
22
28
11
Run Code Online (Sandbox Code Playgroud)
yuk*_*yuk 10
首先创建输出矩阵,然后将其写入文件.
这是新代码:
BaseFile ='s';
n=3;
for i=1:n % it's not recommended to use i or j as variables, since they used in complex math, but I'll leave it up to you
% Open each file consecutively
d=fopen([BaseFile num2str(i) '.txt']);
% read data from file
A=textscan(d,'%f%f', 'CollectOutput',1);
% sort the data according to the 1st column
B=sortrows(A{:},1);
% Instead of deleting a column create new matrix
if(i==1)
C = zeros(size(B,1),n);
end
% Check input file and save the 2nd column
if size(B,1) ~= size(C,1)
error('Input files have different number of rows');
end
C(:,i) = B(:,2);
% don't write yet
fclose (d);
end
% write to a new file
fid=fopen('RT.txt','w');
for k=1:size(C,1)
fprintf(fid, [repmat('%d\t',1,n-1) '%d\n'], C(k,:));
end
fclose(fid);
Run Code Online (Sandbox Code Playgroud)
编辑: 实际上只将数字写入您不需要FPRINTF的文件.请改用DLMWRITE:
dlmwrite('RT.txt',C,'\t')
Run Code Online (Sandbox Code Playgroud)