Let's say I have a character array with key/value pairs:
ch = sprintf('name: John\nsex: M\n')
ch =
'name: John
sex: M
'
This is just a sample. The actual data is in a file and has many pairs. I can use regexp
to get tokens, then use a for loop to assign them to a structure:
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'
Is there a simpler way to achieve this, like using regexp(ch, expr, 'names')
?
You can avoid the for loop by collecting your key/value pairs into a single cell array and then passing the contents of that as a comma-separated list to struct
:
args = [lns{:}];
myStruct = struct(args{:});
And the output:
myStruct =
struct with fields:
name: 'John'
sex: 'M'
Alternatively, you could avoid the use of regexp
and use textscan
to read from the file, which may improve performance:
strs = textscan(fileID, '%s', 'Delimiter', ':');
myStruct = struct(strs{1}{:});