How do I use the matlab.lang.makeValidName in a proper way to change name on my Excel sheets in a for-loop?
조회 수: 9 (최근 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!