在matlab中格式化文本字符串

时间:2013-07-22 11:56:11

标签: string matlab scanf

我正在尝试仅从我拥有的字符串中提取参数名称:

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

1 个答案:

答案 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 bracketscomma作为分隔符来分割句子向上,如果连续有两个或更多分隔符,则将它们计为一个中断(否则你得到空单元格)。