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して文を分割し、行に2つ以上の区切り文字がある場合は、それらを1つとしてカウントするように指示しましたシングル ブレーク (それ以外の場合、空のセル要素が取得されます)。

于 2013-07-22T12:17:40.423 に答える