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

1 visualización (últimos 30 días)
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!

Respuesta aceptada

Stephen23
Stephen23 el 15 de Jun. de 2020
Editada: Stephen23 el 15 de Jun. de 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''

Más respuestas (0)

Categorías

Más información sobre Data Type Conversion en Help Center y File Exchange.

Productos


Versión

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by