обработка нескольких файлов данных в matlab

#matlab

#matlab

Вопрос:

Я хочу прочитать несколько файлов в matlab и извлечь определенные данные из каждого файла, после чего извлеченные данные из каждого файла должны храниться в нескольких текстовых файлах (количество текстовых файлов равно количеству файлов mat).

Пример: допустим, у меня есть два файла fileA.mat и fileB.mat. Данные, которые извлекаются из filaA.mat, должны быть обработаны и сохранены в текстовом файле (FileA.txt ). Тот же процесс для fileB.mat.

Я выполнил процесс для одного файла, но как я могу сделать это для нескольких файлов?

Каждый файл содержит несколько данных. Мне нужно извлечь данные внутри переменных (RigidBodies.Позиции, жесткие тела.Вращения) для первых 290 строк. Данные должны быть извлечены из каждого файла и сохранены в отдельных текстовых файлах.

Для одного файла прочитайте данные, обработайте их, а затем сохраните в текстовом файле:

 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 в моем исходном коде?

Любая помощь приветствуется. Спасибо

Комментарии:

1. Ваш вопрос был возвращен к его первоначальной форме. Если у вас есть дополнительный вопрос, пожалуйста, задайте новый вопрос, а не перепрофилируйте текущий — таким образом, ответы остаются актуальными. Добро пожаловать и наслаждайтесь сайтом!

Ответ №1:

Вы можете попытаться получить переменную, используя имя вашего файла 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
 

Комментарии:

1. Я столкнулся с другой проблемой, когда попытался создать свой код для нескольких файлов. Я меняю описание, так что вы можете мне помочь?

2. @kamel Пожалуйста, не меняйте вопрос после того, как на него был дан ответ. Если у вас есть новый вопрос, задайте его в отдельном сообщении.

3. Я не меняю вопрос, я использовал ваш ответ для изменения своего кода. Моя цель — заставить мой код обрабатывать несколько файлов и записывать результаты в несколько текстовых файлов. Ваш ответ — лишь часть решения. Спасибо