2015-05-01 2 views
0

У меня есть список файлов, которые я хотел бы объединить. Я также хотел бы извлечь информацию из имени файла и поместить ее в текстовый файл вместе с информацией, которую я объединяю.Используйте куски из strsplit в Matlab для текстового файла

Пример:

Имя файла:

p01.male.cond.1.loud.txt 

информация в файле:

0.015   120  50 
0.12   121  52 
0.23   119  53 
0.4   122  59 

Я хотел бы файл выглядеть следующим образом:

p01 male cond 1 loud 0.015 120  50 
p01 male cond 1 loud 0.12 121  52 
p01 male cond 1 loud 0.23 119  53 
p01 male cond 1 loud 0.4  122  59 

I использованный strsplit, чтобы извлечь имена из имени файла, но я не знаю, как использовать куски от strsplit, чтобы поместить в файл данных

ответ

0

Вот способ сделать это, создав новую массив ячеек и помещая информацию в это:

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); 
+0

Спасибо! Но есть ли способ сделать это в более общем плане? У меня около 600 файлов, которые имеют разные имена и разные контенты. – RHatesMe

+0

Mhh вы могли бы поставить вышеуказанный код в цикл for? Это должно быть прямым для обобщения; Я думаю :) –

+0

Я положил его в цикл for, но теперь я получаю эту ошибку: 'Ошибка в ==> runanalysis на 35 chunks = strsplit (имя файла, '.'); % split имя файла в составные части, , где куски разделены на период: '.'' – RHatesMe