How to load data from csv-files with "dot"-structured variable names and convert to struct/table?

2 次查看(过去 30 天)
Importing data is not the biggest problem, however autogenterate variable names from the headers from the csv-file has been a nightmare.
For example, in a csv-file i can have the table like this(note i can't change the structure of the data sorce)
in.sensors.temp.x in.sensors.temp.y
2 3
1 4
Now what i want to do, is to load in the data and create a struct with the same structure as readings header and assign the data to it.
% what i have done so far:
I import the data by using the functionen "importdata". I have tried csvread, xlsread and readtable , but they have either not worked or created corupt data.
After that I get a struct containg data and datatext. The data text is type char characters.
How do I take create a struct by reading a cell containing charcaraters with dots?
I have tried something like this:
in = createStruct(var_name(5), data(:,5))
function temp = createStruct(fullString, data)
fullString = cell2mat(fullString);
dotFind = strfind(fullString,'.');
temp = data;
while ~isempty(dotFind)
%temp = temp.(convertCharsToStrings(fullString(1:dotFind(1)-1)));
struct(fullString(1:dotFind(1)-1),0);
%fullString = fullString(dotFind(1)+1:end);
%dotFind = strfind(fullString,'.');
end
end
but did not perform very well
  1 个评论
Stephen23
Stephen23 2020-12-11
编辑:Stephen23 2020-12-11
Rather than that complex and fiddly loop, to split the string at the dots just use SPLIT or REGEXP.
Rather than using awful EVAL (bad advice), the best way to create the structure field is with SETFIELD.

请先登录,再进行评论。

采纳的回答

Stephen23
Stephen23 2020-12-11
编辑:Stephen23 2020-12-11
Better than evil EVAL is to use more robust SETFIELD and a comma-separated list:
str = 'in.sensors.temp.x';
val = pi;
tmp = regexp(str,'\.','split'); % or SPLIT
S = struct();
S = setfield(S,tmp{:},val)
S = struct with fields:
in: [1×1 struct]
Checking:
S.in.sensors.temp.x
ans = 3.1416
Loop as required. Read more:
  3 个评论
Sean de Wolski
Sean de Wolski 2020-12-11
Awesome! I did not know about setfield. I looked at the see also for rmfield and searched addfield and did not come across setfield... :(

请先登录,再进行评论。

更多回答(1 个)

Niclas Klarström
Niclas Klarström 2020-12-11
Okey, here is an example of simplifyed log file. Just to not leak any sensible info.

类别

Help CenterFile Exchange 中查找有关 Structures 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by