MATLAB Answers

Import name/value parameters from a text file to a struct (or cell array)

3 views (last 30 days)
J G
J G on 15 Jun 2020
Commented: J G on 15 Jun 2020
Hi,
Matlab has all sorts of sophisticated functionality for importing datasets stored in text files, with plenty of options to control input behavior, variable names, replacement options, etc. etc.
What I am looking to do seems to need some of this functionality, but is fairly simple, and what I have found so far seems to be overkill, or doesn't work well. Can someone advise a better way?
Goal: Take a simple name/value list of parameters in a text file and write to a struct (preferred) or cell array, with datatypes appropriately converted and variable names stored as fields.
Example:
Input
myParamFile.txt:
dt .01
x0 0
y0 0
flag1 false
flag2 true
inputArray [1 0 0; 0 1 0; 0 0 1]
jobname 'myjob'
Output:
myStruct =
struct with fields:
dt: 0.0100
x0: 0
y0: 0
flag1: 0
flag2: 1
inputArray: [3×3 double]
jobname: 'myjob'
The point here is that whatever process/function that converts the input to the output will recognize the datatype and convert it appropriately, ideally creating struct fields based on the variable names in the textfile.
I could certainly build a custom parser to do this, but it seems that there is enough built-in Matlab functionality designed to work with text data I am curious if there is an existing and/or simpler way.
Thanks!

  0 Comments

Sign in to comment.

Accepted Answer

Stephen Cobeldick
Stephen Cobeldick on 15 Jun 2020
Edited: Stephen Cobeldick on 15 Jun 2020
As far as I am aware there isn't anything inbuilt. But you can do something like this:
>> str = fileread('myparamfile.txt');
>> tkn = regexp(str,'(\S+)\s+([^\r\n]*)','tokens');
>> tkn = vertcat(tkn{:}).';
>> [num,idx] = cellfun(@str2num,tkn(2,:),'uni',0);
>> idx = [idx{:}];
>> tkn(2,idx) = num(idx);
>> out = struct(tkn{:})
out =
dt: 0.01
x0: 0
y0: 0
flag1: 0
flag2: 1
inputArray: [3x3 double]
jobname: ''myjob''

More Answers (0)

Products


Release

R2020a

Translated by