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

1 view (last 30 days)
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!

Accepted Answer

Stephen23
Stephen23 on 15 Jun 2020
Edited: Stephen23 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)

Categories

Find more on Data Type Conversion in Help Center and File Exchange

Products


Release

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!