2015-11-05 3 views
2

Я использую приведенный ниже код для чтения нескольких файлов с использованием команд importdata и for. Проблема, которая у меня есть, - это сохранить только последний файл. Я получил от importdata одну матрицу, но это должно быть 6 матрицСохранение многофайловых файлов, импортируемых с помощью importdata

Как я могу сохранить все матрицы, которые я импортировал?

myFolder = 'M:\Matlab\Experiment-Result\read all'; 
filePattern = fullfile(myFolder, '*.dat') 
theFiles = dir(filePattern); 
for k = 1 : length(theFiles) 
    baseFileName = theFiles(k).name; 
    fullFileName = fullfile(myFolder, baseFileName); 
    fprintf(1, 'Now reading %s\n', fullFileName); 
    Data = importdata(fullFileName); 
end 

ответ

1

Очень простая причина. Data продолжает переписываться на каждой итерации цикла, поэтому, как только цикл for останавливается, сохраняются только данные, считываемые с последней итерации. Если вы хотите сохранить данные за итерацию, я не знаю, как структурирован ваши данные, но и сделать его наиболее гибким, сделать Data массив ячеек:

myFolder = 'M:\Matlab\Experiment-Result\read all'; 
filePattern = fullfile(myFolder, '*.dat') 
theFiles = dir(filePattern); 
Data = cell(1,numel(theFiles)); %// Change 
for k = 1 : length(theFiles) 
    baseFileName = theFiles(k).name; 
    fullFileName = fullfile(myFolder, baseFileName); 
    fprintf(1, 'Now reading %s\n', fullFileName); 
    Data{k} = importdata(fullFileName); %// Change 
end 

Чтобы получить доступ к К ю данные файл, просто сделать:

out = Data{k}; 

вы можете использовать out как если бы матрица и индекс/срез в ней однако таким образом вы посчитаете нужным.

+0

Спасибо! когда я хочу использовать строку 2 из третьей матрицы, как я могу назвать эту строку? – Ali

+0

@Ali простой. Сначала получите третью матрицу, затем войдите во вторую строку: 'out = Data {3}; row = out (2, :); ' – rayryeng

Смежные вопросы