我正在尝试仅从我拥有的字符串中提取参数名称:
vi('$Excitation', '0A', '0A', '0A')
我只想要“$ Excitation”。
目前我正在使用:
for a = 1:length(Parameters);
Par{a,1} = sscanf ((Parameters{a,1}),'vi(''%s, %*s, %*s, %*s,%*s')';
titles{1,a} = Par{a,1};
end
哪个让我:
"$Excitation',"
我尝试过更改为:
'vi(''%s'',, %*s, %*s, %*s,%*s'
结果没有变化。
有什么建议吗?也有助于解释为什么我的工作不起作用,所以我不会再犯同样的错误了!
修改
我也有类似的问题“gi('MagFlux(Current1):Matrix1',19,131,'Wb')”我想把“MagFlux_Wb”作为输出
答案 0 :(得分:2)
这是什么工作:
OP=textscan((Parameters{a,1}),'%s','whitespace','','delimiter',' ''(),','multipledelimsasone',true);
Par{a,1} = OP{2};
titles{1,a} = Par{a,1};
至于为什么原始代码不起作用,这是因为sscanf读取%s直到空格:
你的字符串是:
vi('$Excitation', '0A', '0A', '0A')
将vi(
放在您的格式字符串的开头意味着它会被忽略,所以'%s'正在搜索:
'$Excitation', '0A', '0A', '0A')
它会一直读到空格:'$Excitation',
,因此这与您的第一个%s
匹配。
在%s首次处理之前,将忽略插入到formatstring中的逗号,这就是为什么它没有达到预期的效果。
剩下的是
'0A', '0A', '0A')
哪个与您的其他格式字符串不匹配:, %*s, %*s, %*s,%*s')
所以输出不符合预期。
我所做的是使用textscan,它允许您指定要用于分割字符串的分隔符或空格。所以我通过告诉它不使用空格来阻止它用空格分割字符串,而是告诉它使用space
,'
,left and right brackets
和comma
作为分隔符来分割句子向上,如果连续有两个或更多分隔符,则将它们计为一个中断(否则你得到空单元格)。