I have several files "2011-01-01.txt", "2013-01-02.txt", "2015-02-01.txt", etc. I wish to create a struct variable for each of the file such that (the values are made up):
machine20110101.size=[1,2,3];
machine20110101.weight=2345;
machine20110101.price=3456;
machine20130102.size=[2,3,4];
machine20130102.weight=1357;
machine20130102.price=123;
machine20150201.size=[1,2,4];
machine20150201.weight=1357;
machine20150201.price=123;
And,
save('f20110101.mat','machine20110101');
save('f20130102.mat','machine20130102') ;
save('f20150201.mat','machine20150201');
As we can see, the struct names are derived from the files' names. How can I construct the above struct variables?
I've searched for a while, but I didn't figure out how to use genvarname
.
And these links (dynamic variable names in matlab, dynamic variable declaration function matlab, Dynamically change variable name inside a loop in MATLAB) didn't solve my problem.
I'm using MATLAB R2012b, so functions like matlab.lang.makeUniqueStrings
defined after this version is unavailable.
Now that I'm in front of MATLAB, here's an example based on my comment above, utilizing dynamic field names with the filenames pruned using
fileparts
andregexprep
in acellfun
call.@patrik raises some good points in the comments. I think the more generic method he would like to see (please correct me if I'm wrong) goes something like this:
Besides @excaza's answer, I used the following approach:
machine.size = [1,2,3]; machine.price = 335; machine.weight = 234;
machineName = ['machine',the_date];
machineSet = struct(machineName,machine);
save(OutputFile,'-struct','machineSet',machineName);