MATLAB の文字列に変数を挿入する
このチュートリアルでは、MATLAB の num2str()
関数を使用して変数値を文字列に挿入する方法について説明します。
MATLAB の文字列に変数を挿入する
変数の値を文字列に挿入する場合は、num2str()
関数を使って値を文字列または文字の配列に変換し、strcat()
関数を使って文字列と連結することが必要です。例えば、浮動小数点数を文字列に挿入してみましょう。
以下のコードを参照してください。
clc
clear
n = 100.577;
s1 = num2str(n);
s2 = "value is ";
s3 = strcat(s2,s1)
出力:
s3 =
"value is 100.577"
num2str()
関数の 2 番目の引数を使用して、出力に表示する精度または桁数を追加することもできます。その入力は正の整数である必要があります。2 番目の引数は、文字列に変換される最大桁数を設定します。精度を設定する場合は、入力を浮動小数点数にする必要があります。
たとえば、数値の最初の 3つの要素のみを文字列に変換し、それを他の文字列と連結してみましょう。以下のコードを参照してください。
clc
clear
n = 10.212;
s1 = num2str(n,3);
s2 = "value is ";
s3 = strcat(s2,s1)
出力:
s3 =
"value is 10.2"
num3str()
関数で精度を 3 に設定したため、出力では、文字列 s3
には浮動小数点数の 3 桁しか含まれていません。精度を設定しない場合、num2str()
関数は数値全体を文字の配列に変換します。
また、浮動小数点数の場合、パーセント記号と一緒に f
文字を使って、有効桁数のような入力の書式を設定することができ、パーセント記号と f
文字の間に有効桁数を渡すことができる。例えば、長い浮動小数点数を有効数字 2 桁に丸め、文字列と連結してみよう。
以下のコードを参照してください。
clc
clear
n = 10.218;
s1 = num2str(n,'%0.2f');
s2 = "value is ";
s3 = strcat(s2,s1)
出力:
s3 =
"value is 10.22"
上記の出力から、数値が有効数字 2 桁に丸められていることがわかります。上記のコードでは、二重引用符を使用して文字列を定義していますが、一重引用符を使用して文字列を定義することもできます。
strcat()
関数を使用して、同じ行に複数の刺し傷を連結することもできます。関数内のすべての文字列変数を渡すだけで済みます。
2つ以上の文字列の間にプラス記号を使用して、それらを連結し、単一の文字列を取得することもできます。上記のコードでは、数値と文字列の間にスペースを手動で追加しましたが、文字列を一重引用符で定義すると、2つの変数の間にスペースを追加できなくなります。
たとえば、一重引用符を使用して上記の例を繰り返しましょう。以下のコードを参照してください。
clc
clear
n = 10.218;
s1 = num2str(n);
s2 = 'value is ';
s3 = strcat(s2,s1)
出力:
s3 =
'value is10.218'
上記の出力では、s2
文字列にスペースを追加しましたが、s3
文字列にはスペースがありません。プラス記号を使用すると、出力は同じになります。
この問題を回避するには、連結される文字列の少なくとも 1つは、文字ベクトルや配列ではなく、文字列である必要があります。num2str()
関数は常に文字配列を返しますが、string()
関数を使用して出力を文字列として取得できます。
たとえば、上記の例の string()
関数を使用してみましょう。以下のコードを参照してください。
clc
clear
n = 10.218;
s1 = string(n);
s2 = 'value is ';
s3 = s2 + s1
出力:
s3 =
"value is 10.218"
数値と文字列の間の出力にスペースがあり、出力も文字列データ型であることがわかります。文字または文字列の長い配列があり、それらを結合し、それらの間にスペースまたは別の区切り文字を含めたい場合は、join()
および strjoin()
関数を使用できます。
結合する値がベクトルまたは行列の場合は join()
関数を使用でき、値が配列の場合は strjoin()
関数を使用する必要があります。join()
関数を使用してさまざまなデータ型の変数を結合できますが、すべての変数を単一のベクトルまたは行列に入れ、それを join()
関数内に渡して結合する必要があります。
たとえば、join()
関数を使用して、文字列、文字配列、および数値を結合してみましょう。以下のコードを参照してください。
clc
clear
n = 100.55;
s1 = "Value is";
s2 = 'kg';
n = [s1,n,s2];
s = join(n)
出力:
s =
"Value is 100.55 kg"
結合する変数の少なくとも 1つの値は文字列である必要があることに注意してください。そうしないと、結果が変わる可能性があります。上記の出力では、3つの変数が結合されています。1つの入力が文字列であるため、結果は文字列として保存されます。
strjoin()
関数も使用できますが、結合したい変数は文字配列データ型である必要があり、配列で囲む必要があります。デフォルトでは、join()
および strjoin()
関数はベクトルまたは配列の値の間にスペースを置きますが、join()
および strjoin()
関数の第2引数を使用して他の区切り文字や文字を指定することもできます。
区切り文字を join()
または strjoin()
関数内の文字配列として渡して、ベクトルまたは配列の要素間に追加する必要があります。たとえば、別の区切り文字を使用して上記の例を繰り返しましょう。
以下のコードを参照してください。
clc
clear
n = 100.55;
s1 = "Value is";
s2 = 'kg';
n = [s1,n,s2];
s = join(n,'--')
出力:
s =
"Value is--100.55--kg"
上記の出力では、スペース区切り文字の代わりに入力区切り文字が出力に追加されていることがわかります。また、指定された行列または配列の要素間の区切り文字として、任意の長さの文字列または文字配列を追加することもできます。
Matlab の sprintf()
関数を使用することもできます。この関数は、フォーマットされたデータを文字列または文字配列に追加するために使用されます。sprintf()
関数の最初の引数はフォーマット仕様であり、次の引数は文字列または文字配列に入れたい変数です。
フォーマット仕様が二重引用符を使用した文字列として定義されている場合、sprintf()
関数の出力も文字列になります。フォーマット仕様が一重引用符を使用して文字配列として定義されている場合、sprintf()
関数の出力も文字配列になります。
num2str()
関数の場合に上記で使用したのと同じ方法でフォーマット仕様を使用できます。パーセント記号を使用できます。その後、フィールド幅を渡し、次にデータ型を渡すことができます。
たとえば、sprintf()
関数を使用して、さまざまなデータ型変数を文字列に追加してみましょう。以下のコードを参照してください。
clc
clear
n = 100.55;
s1 = "Value is";
s2 = 'kg';
s = sprintf("%s %0.1f %s",s1,n,s2)
出力:
s =
"Value is 100.5 kg"
上記のコードでは、文字列データ型に%s
を使用し、浮動小数点データ型に%f
を使用しました。また、浮動小数点数の場合の有効桁数も定義しました。
上記のコードでは、文字列を変数に保存してから、sprintf()
関数に渡しましたが、関数の最初の引数に文字列を直接書き込むこともできます。大きな文字列変数の場合、簡単にするために、それらを変数に保存し、sprintf()
関数内に渡す必要があります。
文字の場合は%c
、整数の場合は%d
など、他のデータ型にも記号を使用できます。sprintf()
関数の詳細については、このリンクを確認してください。