Remove accent from struct
이전 댓글 표시
I have this info_circuitos.Name_circuito. I need to shearch in a name. but the struct have accents. a e i o u OR A E I O U. Could have accent in any of that letter.
I want to create a new info_circuitos.Name_circuito without accent Help pls.
Thanks
채택된 답변
추가 답변 (1개)
Walter Roberson
2013년 12월 9일
편집: Walter Roberson
2013년 12월 9일
Assuming ISO-8859-1 rather than full Unicode:
This code is untested.
function new_structure = remove_accents_from_struct(old_structure)
% Note: this code is only designed for size(structure) = 1 x 1
% and does not descend recursively into substructures.
old_fields = fieldnames(old_structure);
new_fields = cellfun( @remove_accents_from_string, old_fields, 'Uniform', 0);
if isequal(old_fields, new_fields) %optimization when there are no accents
new_structure = old_structure;
return
end
num_fields = length(old_fields);
% create empty structure populated with the translated field names but not their contents
new_structure = cell2struct( cell( num_fields, 1 ), new_fields );
% now copy the field contents over
for K = 1 : num_fields
new_structure.(new_fields{K}) = new_structure.(old_fields{K});
end
end
function newS = remove_accents_from_string(S)
% table extracted from % http://core.trac.wordpress.org/browser/tags/3.7.1/src/wp-includes/formatting.php
accented_chars = [ ...
char(128), char(131), char(138), char(142), char(154), ...
char(158), char(159), char(162), char(165), char(181), ...
char(192), char(193), char(194), char(195), char(196), ...
char(197), char(199), char(200), char(201), char(202), ...
char(203), char(204), char(205), char(206), char(207), ...
char(209), char(210), char(211), char(212), char(213), ...
char(214), char(216), char(217), char(218), char(219), ...
char(220), char(221), char(224), char(225), char(226), ...
char(227), char(228), char(229), char(231), char(232), ...
char(233), char(234), char(235), char(236), char(237), ...
char(238), char(239), char(241), char(242), char(243), ...
char(244), char(245), char(246), char(248), char(249), ...
char(250), char(251), char(252), char(253), char(255) ];
unaccented_chars = 'EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy';
newS = S;
[tf, idx] = ismember(S, accented_chars);
newS(tf) = unaccented_chars(idx);
end
댓글 수: 2
5mid
2013년 12월 9일
Walter Roberson
2013년 12월 9일
You said you could have an accent on any letter, so I could not assume that you only want to deal with grave accents on English vowels.
Most of the rest of the length is comments or efficiency.
카테고리
도움말 센터 및 File Exchange에서 Characters and Strings에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!