0

我试图只从我拥有的字符串中提取参数名称:

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”作为输出

4

1 回答 1

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 之前,您插入到格式字符串中的逗号将被忽略,这就是它没有达到您预期的原因。

剩下的就是

'0A', '0A', '0A')

这与您的格式字符串的其余部分并不真正匹配:, %*s, %*s, %*s,%*s')因此输出与预期不符。

我所做的是使用 textscan,它允许您指定要用于拆分字符串的分隔符或空格。所以我通过告诉它不要使用空格来停止用空格分割字符串,而是告诉它使用space, ', left and right brackets, 和comma作为分隔符来分割句子,如果连续有两个或多个分隔符,则将它们计为单间断(否则你会得到空单元格元素)。

于 2013-07-22T12:17:40.423 回答