Вот способ сделать это, создав новую массив ячеек и помещая информацию в это:
clear
clc
close all
FileName = 'p01.male.cond.1.loud.txt';
%// Set up the info from the file, in a cell array
InfoFile = {0.015 120 50;
0.12 121 52;
0.23 119 53;
0.4 122 59};
%//Get elements to put into file
NameElements = strsplit(FileName,'.')
Вот NameElements
выглядит следующим образом:
NameElements =
'p01' 'male' 'cond' '1' 'loud' 'txt'
Получить фактическое количество элементов, которые вы хотите сохранить. Вот они первые 5 выходов strsplit
:
NumGoodElements = numel(NameElements)-1;
Инициализировать новый массив ячеек, чтобы разместить все элементы и положить InfoFile
в нем:
NewFile = cell(size(InfoFile,1),size(InfoFile,2)+NumGoodElements);
%// Put the info (numbers) in the cell array.
NewFile(:,NumGoodElements+1:end) = InfoFile;
На данный момент NewFile
выглядит следующим образом:
NewFile =
[] [] [] [] [] [0.0150] [120] [50]
[] [] [] [] [] [0.1200] [121] [52]
[] [] [] [] [] [0.2300] [119] [53]
[] [] [] [] [] [0.4000] [122] [59]
И только вам нужно добавить первые 5 элементов NameElements
в массив ячеек, повторяя их 4 раза чтобы заполнить весь массив:
NewFile(:,1:NumGoodElements) = repmat(NameElements(1:NumGoodElements),size(InfoFile,1),1)
И окончательный вывод:
NewFile =
'p01' 'male' 'cond' '1' 'loud' [0.0150] [120] [50]
'p01' 'male' 'cond' '1' 'loud' [0.1200] [121] [52]
'p01' 'male' 'cond' '1' 'loud' [0.2300] [119] [53]
'p01' 'male' 'cond' '1' 'loud' [0.4000] [122] [59]
Для того, чтобы экспортировать этот массив ячеек в текстовый файл, выполните следующие действия с помощью fprintf
: (проверить here для примера по The MathWorks)
1) Откройте файл, который вы хотите написать в
fileID = fopen('FinalData.dat','w');
2) Определить формат, чтобы назначить каждый столбец массива клеток
formatSpec = '%s %s %s %i %s %1.4f %3.0f %2.0f \n';
3) Цикл по каждой строке и записать содержимое массива ячеек в файле. Затем закройте его.
[nrows,ncols] = size(NewFile);
for row = 1:nrows
fprintf(fileID,formatSpec,C{row,:});
end
fclose(fileID);
Спасибо! Но есть ли способ сделать это в более общем плане? У меня около 600 файлов, которые имеют разные имена и разные контенты. – RHatesMe
Mhh вы могли бы поставить вышеуказанный код в цикл for? Это должно быть прямым для обобщения; Я думаю :) –
Я положил его в цикл for, но теперь я получаю эту ошибку: 'Ошибка в ==> runanalysis на 35 chunks = strsplit (имя файла, '.'); % split имя файла в составные части, , где куски разделены на период: '.'' – RHatesMe