在matlab中处理多个数据文件



我想在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

相关内容

  • 没有找到相关文章

最新更新