Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String matlab按分隔符分组的字符串列表_String_Matlab_Cell_Grouping_Delimiter - Fatal编程技术网

String matlab按分隔符分组的字符串列表

String matlab按分隔符分组的字符串列表,string,matlab,cell,grouping,delimiter,String,Matlab,Cell,Grouping,Delimiter,我有一个字符串单元格。每个元素实际上都是一个文件名,根据不同的类别具有delimeters。例如,blahblah.speaker.4.id.55等等。我希望能够根据一个分隔值对字符串单元格进行分组。例如,我想按扬声器号码对单元格进行分组。所以我想以一个新的单元格数组结束,其中数组的每个元素都包含一个具有相同扬声器的文件名单元格 例如: 元素1:‘废话。演讲者。4。杜比’,‘废话。演讲者。4。达达’元素2:‘废话。演讲者。5。德德’,‘废话。演讲者。5。渡渡鸟’ 多谢各位 正如@Adriaan所

我有一个字符串单元格。每个元素实际上都是一个文件名,根据不同的类别具有delimeters。例如,blahblah.speaker.4.id.55等等。我希望能够根据一个分隔值对字符串单元格进行分组。例如,我想按扬声器号码对单元格进行分组。所以我想以一个新的单元格数组结束,其中数组的每个元素都包含一个具有相同扬声器的文件名单元格

例如:
元素1:‘废话。演讲者。4。杜比’,‘废话。演讲者。4。达达’元素2:‘废话。演讲者。5。德德’,‘废话。演讲者。5。渡渡鸟’


多谢各位

正如@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_数字转换为实际数字

id_numbers = num2cell(str2double({data.id_number}));
[data.id_number] = deal(id_numbers{:});
现在我们可以对此执行操作

查找第一部分为“blahblah”的所有情况

您可以对任何字段执行此操作。如果字段包含数字(当前所有字段都是字符串)。你可以这样做

sub_data = data([data.id_number] == 55);

           blah_part: 'blahblah'
       attendee_type: 'speaker'
         some_number: '4'
                  id: 'id'
           id_number: 55
如果你不反对,你也可以这样创建
结构

data = regexp(names, '(?<blah_part>.*?)\.(?<attendee_type>.*?)\.(?<some_number>\d*)\.(?<id>.*?)\.(?<id_number>\d*)', 'names')
data=regexp(名称,(?*?)\(?*?)\(?*?)\(?\d*)\(?*?)\(?\d*),“名称”)

不要使用单元格,使用a来澄清,我最初使用struct来获取所有文件名,但我需要根据speaker deliminter对这些文件名进行分组。同一个扬声器可能有多个EL文件。所以我使用names={filestruct{:}.name}创建了一个文件名单元格;
data = regexp(names, '(?<blah_part>.*?)\.(?<attendee_type>.*?)\.(?<some_number>\d*)\.(?<id>.*?)\.(?<id_number>\d*)', 'names')