MonthNames=['JAN'; 'FEB'; 'MAR'; 'APR'; 'MAY'; 'JUN'; 'JUL'; 'AUG'; 'SEP'; 'OCT'; 'NOV'; 'DEC'];
for sensorIndex = 1:numel(sensor)
for monthIndex = 1:numel(MonthNames)
% Get the current sensor
k = sensor(sensorIndex);
% Get the file(s?) associated with that sensor
S = dir(fullfile(path, '*', sprintf('sensor%d.xls', k));
% Create an output filename
filename = sprintf('sensor%d_%s.xls', k, MonthNames(monthIndex));
% do your stuff
F = fullfile(S(k).folder,S(k).name);
data = readtable(F);
writetable(data, filename);
end
end
Таким образом, вы можете не иметь ВСЕ месяцы. Существует множество способов кодирования, но лично я предпочитаю сохранять переменные цикла в виде индексов и получать текущую переменную внутри цикла, используя этот индекс.
@mathew81 добавил это в цикл, где я написал % do your stuff
. В противном случае вам нужно кэшировать и восстанавливать имена файлов, но тогда вы просто зацикливаетесь позже, чтобы перебирать кешированные имена файлов. Просто делайте все по кругу.
Меня смущает синтаксис команды writetable.
@ mathew81 mathew81 Меня смущает, как ваш код, кажется, добавляет все данные датчика к одной переменной out
, а затем записывает это в xls-файл последнего датчика за январь. В коде, который я предоставил, вы должны вызвать writetable(out, filename);
там, где написано % do your stuff
, но вы также должны поместить некоторые данные в out
, прежде чем делать это. В вашем примере похоже, что вы просто читаете таблицы, а затем записываете те же самые таблицы, поэтому, к сожалению, я не могу дать вам совет, что там изменить.
возможно, команда writetable должна быть внутри цикла, но с индикатором для смены датчика (например, «sensor» (ci). «_January.xls»). Это та часть, в которой мне нужна помощь.
@ mathew81 - я отредактировал ответ, чтобы попытаться включить ваш код, но, надеюсь, это дает вам понять, что опубликованный вами код на самом деле не показывает нам, что вы пытаетесь сделать. Похоже, вы загружаете файл, а затем записываете этот файл. Если предполагается, что часть S = dir
извлекает несколько файлов, вам нужно будет перебирать эти файлы, поэтому у вас будет третий цикл внутри, например, for fileIndex = 1:numel(S)
, а затем currentFile = S(fileIndex)
, в основном, и вы можете сделать свой out = [out; data]
, но я не знаю, что вы пытаетесь сделать, так что это лучшее, что я могу помочь.
приведенный выше код работает нормально, но имена файлов, созданных с помощью команды xlswrite, - sensor1A, sensor1B...sensor5E и т. д. Поэтому что-то нужно исправить в filename = sprintf('sensor%d_%s.xls', k, MonthNames (Индекс месяца)); линия. Спасибо за ваше время!
@ mathew81 - Вы не предоставили определение для вектора sensor
, но если вы хотите использовать индекс датчика вместо того, что у вас есть в качестве имени датчика, замените k
на sensorIndex
в команде sprintf
. Если имена ваших датчиков являются строками, а не числами, то, честно говоря, я удивлен, что форматирование %d
дает вам что-то.
Почему вы полностью опустошили вопрос? Теперь люди, читающие ответ, не могут понять, чем он может быть полезен...