MATLAB で sscanf() を使用して文字列から値を抽出する
このチュートリアルでは、MATLAB で sscanf()
関数を使用して、特定の形式に従って文字列をスキャンする方法について説明します。
MATLAB で sscanf()
関数を使用して文字列から値を抽出する
sscanf()
関数は、MATLAB で指定された形式に従って文字列をスキャンします。 たとえば、指定された文字列に数字が含まれていて、それらを互いに分離して行列に保存したい場合は、sscanf()
関数を使用できます。
sscanf()
関数の最初の引数は入力文字列で、2 番目の引数は、数値の %d
のような文字列をスキャンするために使用する形式です。 3 番目の引数はオプションで、文字列をスキャンするサイズを定義します。文字列全体をスキャンしたくない場合に便利です。
サイズを指定しない場合、関数は文字列全体をスキャンします。 sscanf()
関数は 4つの引数を返します。
最初の出力引数は、文字列のスキャンの結果を含む行列です。 2 番目の出力引数はオプションで、関数が正常にスキャンした要素の数を返します。
3 番目のオプションの出力引数は、文字列のスキャン中に発生したエラー メッセージを返します。 4 番目の引数もオプションで、sscanf()
がスキャン プロセスを停止した位置の次のインデックスを返します。
たとえば、複数の浮動小数点数を含む文字列を作成し、MATLAB で sscanf()
関数を使用してそれらを分離してみましょう。
コード:
clc
clear
My_S = "3.1 2.2 5.2";
num = sscanf(My_S,'%f')
出力:
num =
3.1000
2.2000
5.2000
上記のコードでは、clc
コマンドを使用して MATLAB コマンド ウィンドウをクリアし、clear
コマンドを使用してワークスペースを消去します。 出力に見られるように、すべての浮動小数点数が分離され、行列内に保存されています。
ここで、文字と数字を含む別の文字列を定義して、数字を分離してみましょう。
コード:
clc
clear
My_S = "3.1 2.2 hello 5.2";
[num, count, msg, index] = sscanf(My_S,'%f')
出力:
num =
3.1000
2.2000
count =
2
msg =
'Matching failure in format.'
index =
9
上記のコードは、sscanf()
関数からのすべての出力を格納するために 4つの出力引数を定義しています。 上記の結果では、num
変数には 2つの要素しか含まれていませんが、ご覧のとおり、指定された文字列には 4つの数値があります。
理由は msg
変数に返されます。これは、指定された形式で一致に失敗したことを示しています。 上記のコードでは、%f
記号を使用して浮動小数点数をスキャンするように設定しているため、関数が文字 h
である非浮動小数点数に移動すると、そこで停止します。
インデックスとともにエラー メッセージが返され、文字列のスキャンが停止された位置 (出力では 9
) でした。
sscanf()
関数内の 3 番目の入力引数としてサイズを定義することもできます。 サイズは、上記の出力のカウントに関連しています。 サイズを 1
と定義すると、関数は文字列の最初の要素のみを読み取ります。
行列の場合、文字列を m*n
として定義することもできます。 これは、特定の行列の特定の行または列のみを読み取りたい場合に便利です。
%d
は符号付き整数または基数 10 の数値、%u
は符号なし整数または基数 10 の数値、%o
は 8 進数または基数 8 の数値、%x
は 16 進数または 16 進数の場合、%f
は浮動小数点数の場合です。
sscanf()
関数の詳細については、この リンク を確認してください。