我想在matlab中读取多个文件,并从每个文件中提取特定的数据,然后从每个文件提取的数据应该存储在多个文本文件中(txt文件的数量与mat文件的数量相同(。
示例:比方说,我有两个文件FileA.mat和FileB.mat。从文件中提取的数据应该被处理并存储在txt文件(FileA.txt(中。FileB.mat.的过程相同
我对一个文件进行了处理,但如何对多个文件进行处理?
每个文件包含多个数据。我需要提取前290行的变量(RigidBodies.Positions、RigidBody.Rotations(中的数据。数据应从每个文件中提取,并存储在单独的txt文件中。
对于一个文件,读取数据,进行处理,然后将其存储在一个txt文件中:
load(strcat('Test.mat'));
pos=Test.RigidBodies.Positions(:,:,1:290);
b=Test.RigidBodies.Rotations(:,:,1:290);
for i = 1:290
c(:,:,i)=reshape(b(:,:,i),3,3);
rot(:,:,i)=rotm2eul(c(:,:,i));
end
trajdata=[pos,rot];
trajdata=reshape(trajdata,6,290)';
a=zeros(290,1);
trajdata=[trajdata,a];
save('data1.mat', 'data');
load('data1.mat')
dlmwrite('test1.txt', data, 'delimiter','t','newline','pc')
这些是我在阅读多个文件时发现的:
mat = dir('*.mat');
for q = 1:length(mat)
load(mat(q).name);
data(q,:,:) = Testing0006.RigidBodies.Positions(:,:,1:290)
end
但是,如何更改for循环中文件的名称?类似:
pos=**Test**.RigidBodies.Positions(:,:,1:290);
b=**Test**.RigidBodies.Rotations(:,:,1:290);
我怎么能把第二个循环放在第一个循环中,就像我在原始代码中对c和rot所做的那样?
感谢您的帮助。感谢
您可以尝试使用mat文件的名称检索变量(如果它与所包含变量的名称相对应,请参见示例mat(q(.name==Testing0006(
for q = 1:length(mat)
load(mat(q).name);
[~, testName, ~] = fileparts(mat(q).name);
testVar = eval(testName);
data(q,:,:) = testVar.RigidBodies.Positions(:,:,1:290)
end
如果您不需要变量在工作区中,您可以向load(mat(q).name)
添加一个返回值
for q = 1:length(mat)
tmp = load(mat(q).name);
[~, testName, ~] = fileparts(mat(q).name);
data(q,:,:) = tmp.(testName).RigidBodies.Positions(:,:,1:290)
end