Как сказал @Adriaan, лучше всего использовать struct
для хранения данных этого типа. Затем вы можете использовать эти структуры для группировки позже. Следующий код предполагает, что у вас есть согласованное количество частей во всех именах файлов.
names = {'blahblah.speaker.4.id.55', ...
'blahblah.speaker.4.id.66', ...
'blah.listener.3.id.77'};
output = regexp(names, '\.', 'split');
output = cat(1, output{:});
% Fieldnames for each of the "parts"
names = {'blah_part', 'attendee_type', 'some_number', 'id', 'id_number'};
% Now convert it to a struct
data = cell2struct(output.', names);
3x1 struct array with fields:
blah_part
attendee_type
some_number
id
id_number
Теперь давайте просто переведем этот id_number в фактическое число реального быстро.
id_numbers = num2cell(str2double({data.id_number}));
[data.id_number] = deal(id_numbers{:});
Теперь мы можем выполнять действия по этому вопросу.
Найти все случаи, когда первая часть является «blahblah»
inds = strcmp({data.blah_part}, 'blahblah');
data_with_blahblah = data(inds);
2x1 struct array with fields:
blah_part
attendee_type
some_number
id
id_number
Вы можете сделать это для любого из полей. Если ваши поля содержат числа (все ваши строки в настоящее время). Вы можете сделать что-то вроде.
sub_data = data([data.id_number] == 55);
blah_part: 'blahblah'
attendee_type: 'speaker'
some_number: '4'
id: 'id'
id_number: 55
Если вы не прочь regular expressions, вы можете также создать structure
таким образом.
data = regexp(names, '(?<blah_part>.*?)\.(?<attendee_type>.*?)\.(?<some_number>\d*)\.(?<id>.*?)\.(?<id_number>\d*)', 'names')
Не используйте ячейку, используйте [ 'structure'] (http://mathworks.com/help/matlab/ref/struct.html) – Adriaan
уточнить, я использовал, чтобы получить-структуру всех сначала имена файлов, но мне нужно сгруппировать эти имена файлов в соответствии с разделителем динамиков. могут быть многострочные файлы с одним и тем же динамиком. поэтому я создал ячейку имен файлов, используя имена = {filestruct {:}. name}; – user3772547