2017-03-23 47 views
2

我有一個關於Matlab-Simulink編程的問題。替換Simulink塊名稱中的非法字符

blocks = find_system(model_name, 'FindAll', 'on', 'LookUnderMasks', 'on', 'Type', 'block'); 

%replace all non alphanumerical characters with empty string 
for i=1:length(blocks) 
    regexprep(get_param(blocks(i), 'Name'), '\W*', ''); %'[^a-zA-Z_0-9]' 
end 

這是我的代碼。我想僅允許塊名中的字母數字字符和下劃線。但是,如果我運行程序,名稱不會改變。 奇怪的是,如果我讓出的分號在for循環的行末尾,在命令窗口中名稱實際上正在改變...

我知道解決方案可能很簡單,但我我只是沒有把握好。 在此先感謝!

回答

2

當您致電regexprep(get_param(blocks(i), 'Name'), '\W*', '');時,您實際上正在替換無效字符,但您不會分配替換的字符串。

如果修改,如呼叫:

set_param(blocks(i), 'Name', regexprep(get_param(blocks(i), 'Name'), '\W*', '')); 

替換名稱將爲塊設置。

整個片段可能看起來像:

blocks = find_system(model_name, 'FindAll', 'on', 'LookUnderMasks', 'on', 'Type', 'block'); 

for i=1:length(blocks) 
    block = blocks(i); 
    set_param(block, 'Name', regexprep(get_param(block, 'Name'), '\W*', '')); 
end 
+0

哦,不:d 我需要什麼腦滯後從我身邊..是啊肯定set_param! 謝謝,先生! –