可以在结构中返回键/值对



假设我有一个带有键/值对的字符数组:

ch = sprintf('name: Johnnsex: Mn')
ch =
    'name: John
     sex: M
     '

这只是一个样本。实际数据在文件中,并且有许多对。我可以使用 regexp获取令牌,然后使用for循环将它们分配给结构:

lns = regexp(ch, '(w*):s(.*?)n', 'tokens');
for i = 1:numel(lns)
    myStruct.(lns{i}{1}) = lns{i}{2};
end
myStruct = 
  struct with fields:
    name: 'John'
     sex: 'M'

是否有一种更简单的方法来实现此目的,例如使用regexp(ch, expr, 'names')

您可以通过将键/值对收集到单个单元格数组中,然后将其作为逗号分隔列表的内容传递给struct

来避免使用键/值。
args = [lns{:}];
myStruct = struct(args{:});

和输出:

myStruct = 
  struct with fields:
    name: 'John'
     sex: 'M'

另外,您可以避免使用regexp并使用textscan从文件中读取,这可能会提高性能:

strs = textscan(fileID, '%s', 'Delimiter', ':');
myStruct = struct(strs{1}{:});

最新更新