How do I use the matlab.lang.makeValidName in a proper way to change name on my Excel sheets in a for-loop?
10 次查看(过去 30 天)
显示 更早的评论
I want to change name on my sheets so they can be made into a struct array are there any better ways to do this then i do here. Now I focus on just reading a text from a xlsx-format. But I get stuck in the line where I use the matlab.lang.makevalidName function is.
for i=1:n
[~, data_text, data_raw] = xlsread(doc_name, sheets{i}) % Read sheet to Matlab
S = {sheets{i}};
N = matlab.lang.makeValidName(S,'ReplacementStyle','delete')
sheet_struct.(N) = data_raw
end
0 个评论
采纳的回答
Guillaume
2016-6-8
As you've done it there is no need to wrap the string sheets{i} into a cell array. The problem you have comes from that and not from makeValidName. Since you pass a cell array, you get a cell array back from makeValidName. You can't use a cell array as a field value, so you would have to extract your modified sheet name from the cell array. So one way to fix it would be:
for i = 1:n
[~, data_text, data_raw] = xlsread(doc_name, sheets{i}) % Read sheet to Matlab
N = matlab.lang.makeValidName(sheets{i}, 'ReplacementStyle', 'delete');
sheet_struct.(N) = data_raw;
end
The other option is to simply call makeValidName outside of the loop at once for all the sheet. That should be faster as well:
N = matlab.lang.makeValidName(sheets, 'ReplacementStyle', 'delete');
for i = 1:n
[~, data_text, data_raw] = xlsread(doc_name, sheets{i}) % Read sheet to Matlab
sheet_struct.(N{i}) = data_raw;
end
Personally, I think that dynamic field names are just as bad an idea as dynamic variables, but that's another topic entirely.
3 个评论
Guillaume
2016-6-8
编辑:Guillaume
2016-6-8
In 2012b, you can use genvarname instead. It's not as flexible and will generate uglier names but essentially does the same.
Or you could simply use a regular expression. As far as I can tell, your makeValidName usage is equivalent to:
N = regexprep(sheets, '\W', '');
edit: after looking at the code of matlab.lang.makeValidName. Actually, it does a lot more than that, but if you start with a valid excel sheet name, then the above is all that's required to make a valid field name.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!