5.4.2 Numerical Data and Strings

Last-modified: 2025-03-21 (金) 20:48:58

5.4.2 数値データと文字列

数値データを対応する UTF-8 エンコード文字に変換する 文字列連結関数 ( 「文字列の連結」を参照) の他に、数値データを文字列としてフォーマットする関数がいくつかあります。mat2str および はnum2str実数または複素数行列を変換し、 はint2str 整数行列を変換します。 int2strは複素数値の実数部を取得し、小数値を整数に丸めます。数値データを文字列としてフォーマットするより柔軟な方法は、関数 (「フォーマットされた出力」、sprintf をsprintf参照) を使用することです。

: s = mat2str (x, n)

: s = mat2str (x, n, "class")

実数、複素数、論理行列を文字列としてフォーマットします。

返された文字列は、関数を使用して元の行列を再構築するために使用できますeval。

値の精度はnで指定します。nがスカラーの場合、行列の実部と虚部の両方が同じ精度で出力されます。それ以外の場合は、n(1)実部の精度を定義し、虚部の精度を定義します。 nn(2)のデフォルトは15 です。

引数が指定されている場合は、 x"class"のクラスが文字列に含まれ、同じクラスの行列が構築されます。 eval

mat2str ([ -1/3 + i/7; 1/3 - i/7 ], [4 2])
    ⇒ "[-0.3333+0.14i;0.3333-0.14i]"
mat2str ([ -1/3 +i/7; 1/3 -i/7 ], [4 2])
    ⇒ "[-0.3333+0i 0+0.14i;0.3333+0i -0-0.14i]"
     ⇒ "int16([1 -1])"
mat2str (logical (eye (2)))
    ⇒ "[true false;false true]"
isequal (x, eval (mat2str (x)))
    ⇒ 1

See also: sprintf, num2str, int2str.

: str = num2str (x)

: str = num2str (x, precision)

: str = num2str (x, format)

数値 (または配列) を文字列 (または文字配列) に変換します。

オプションの 2 番目の引数には、出力で使用する有効桁数 ( precision ) を指定するか、 ( Formatted Outputを参照) のようなフォーマット テンプレート文字列 ( format ) を指定します。 複素数も処理できます。 sprintfnum2str

例:

num2str (123.456)
 ⇒ 123.456
num2str (123.456, 4)
 ⇒ 123.5
s = num2str ([1, 1.34; 3, 3.56], "%5.1f")
 ⇒ s =
      1.0  1.3
      3.0  3.6
whos s
 ⇒ Variables in the current scope:
       Attr Name        Size                     Bytes  Class
       ==== ====        ====                     =====  =====
            s           2x8                         16  char
    Total is 16 elements using 16 bytes
num2str (1.234 + 27.3i)
 ⇒ 1.234+27.3i

このnum2str関数はあまり柔軟ではありません。結果をより適切に制御するには、sprintf(フォーマットされた出力を参照) を使用します。

プログラミングノート:

MATLAB との互換性のため、文字列を返す前に先頭のスペースが削除されます。

より大きい整数はflintmax正しく表示されない可能性があります。

複素数xの場合、フォーマット文字列には出力変換指定が 1 つだけ含まれ、それ以外は含まれません。そうでない場合、結果は予測できません。

プログラマーによって指定されたオプションの形式は、変更されることなくそのまま使用されます。これは、内部ヒューリスティックに基づいて 形式を変更する MATLABとは対照的です。

See also: sprintf, int2str, mat2str.

: str = int2str (n)

整数 (または整数の配列) を文字列 (または文字配列) に変換します。

int2str (123)
 ⇒ 123
s = int2str ([1, 2, 3; 4, 5, 6])
 ⇒ s =
       1  2  3
       4  5  6
whos s
 ⇒ Variables in the current scope:
       Attr Name        Size                     Bytes  Class
       ==== ====        ====                     =====  =====
            s           2x7                         14  char
    Total is 14 elements using 14 bytes

この関数はあまり柔軟ではありません。結果をより適切に制御するには、sprintf(フォーマットされた出力を参照) を使用します。

プログラミングノート:

非整数は整数に丸められて表示されます。複素数の実数部のみが表示されます。

See also: sprintf, num2str, mat2str.

: d = str2double (str)

文字列を実数または複素数に変換します。

文字列は、a と b が実数で複素単位が または である、次のいずれかの形式である必要があり'i'ます'j'。

a + bi
a + b*i
a + i*b
bi + a
b*i + a
i*b + a

a および/または b が存在する場合、その形式は [+-]d[,.]d[[eE][+-]d] です。ここで、括弧はオプションの引数を示し、 は'd'0 個以上の数字を示します。特殊な入力値Inf、、NaNもNA 受け入れられます。

strは、文字列、文字マトリックス、またはセル配列です。文字配列の場合、変換は行ごとに繰り返され、倍精度または複素数の配列が返されます。s 内の空の行は削除され、数値配列には返されません。セル配列の場合、各文字列要素が処理され、 strと同じ次元の倍精度または複素数の配列 が返されます。

変換できないスカラーまたは文字列入力の場合、str2doubleNaN を返します。同様に、文字配列入力の場合、変換できなかったsstr2doubleの行に対して NaN を返します。セル配列の場合、 変換に失敗したsの要素に対して NaN を返します。文字列と数値が混在するセル配列内の数値要素は文字列ではないため、これらの要素の変換は失敗し、NaN が返されることに注意してください。 str2double

プログラミング ノート:str2doubleを置き換えることができ、より効率的であり、不明なデータに str2num使用するセキュリティ リスクを回避します。eval

See also: str2num.

: x = str2num (s)

: [x, state] = str2num (s)

文字列 (または文字配列)を数値 (または配列) に変換します。

Examples:

str2num ("3.141596")
     ⇒ 3.141596
str2num (["1, 2, 3"; "4, 5, 6"])
     ⇒ 1  2  3
        4  5  6

オプションの 2 番目の出力state は、変換が成功した場合は論理的に true になります。変換が失敗した場合は、数値出力 xは空になり、stateは false になります。

注意:は関数str2numを使用してeval変換を行うため、文字列sstr2numに含まれるコードが実行されます 。より安全で高速な変換のために を使用してください。 str2double

文字列のセル配列の場合は を使用しますstr2double。

See also: str2double, eval.

: d = bin2dec (str)

文字列strで表される 2 進数に対応する 10 進数を返します。
For example:

bin2dec ("1110")
    ⇒ 14

変換中はスペースは無視され、バイナリ数値を読みやすくするために使用される場合があります。

bin2dec ("1000 0001")
    ⇒ 129

strが文字列行列の場合、 strの行ごとに 1 つの変換された数値を含む列ベクトルを返します。無効な行は NaN と評価されます。

strが文字列のセル配列の場合、 str内のセル要素ごとに 1 つの変換された数値を含む列ベクトルを返します。

See also: dec2bin, base2dec, hex2dec.

: bstr = dec2bin (d)

: bstr = dec2bin (d, len)

整数d を2 進数に 変換したものを表す 1 と 0 の文字列を返します 。

dが行列またはセル配列の場合、 d内の各要素に対して 1 行の文字列行列を返します。先頭にゼロが埋め込まれ、最大値の幅になります。

オプションの 2 番目の引数lenは、結果の最小桁数を指定します。

dの負の要素については、2 の補数のバイナリ値を返します。結果は、入力の大きさに応じて、8、16、32、または 64 ビットになるように先頭に 1 が埋め込まれます。正の入力要素は、同じ幅になるように先頭に 0 が埋め込まれます。

例:

dec2bin (14)
    ⇒ "1110"
dec2bin (-14)
    ⇒ "11110010"

プログラミングのヒント:dec2bin入力の小数部は破棄されます。小数部も変換する必要がある場合は、dec2base 小数点以下の桁数を 0 以外にして呼び出します。また、小数入力にfixまたは を 使用してround、予測可能な丸め動作を確保することもできます。

See also: bin2dec, dec2base, dec2hex.

: hstr = dec2hex (d)

: hstr = dec2hex (d, len)

整数d を16 進数 (base16) に変換した結果を表す文字列を返します。

dが負の場合、 dの 16 進数の補数を返します。

dが行列またはセル配列の場合、 d内の各要素に対して 1 行の文字列行列を返します。先頭にゼロが埋め込まれ、最大値の幅になります。

オプションの 2 番目の引数lenは、結果の最小桁数を指定します。

例:

dec2hex (2748)
    ⇒ "ABC"
dec2hex (-2)
    ⇒ "FE"

プログラミングのヒント:dec2hex入力の小数部は破棄されます。小数部も変換する必要がある場合は、dec2base 小数点以下の桁数を 0 以外にして呼び出します。また、小数入力にfixまたは を 使用してround、予測可能な丸め動作を確保することもできます。

See also: hex2dec, dec2base, dec2bin.

: d = hex2dec (str)

文字列strで表される 16 進数に対応する整数を返します。

For example:

hex2dec ("12B")
     ⇒ 299
hex2dec ("12b")
     ⇒ 299

strが文字列行列の場合、 strの行ごとに 1 つの変換された数値を含む列ベクトルを返します。無効な行は NaN と評価されます。

strが文字列のセル配列の場合、 str内のセル要素ごとに 1 つの変換された数値を含む列ベクトルを返します。

See also: dec2hex, base2dec, bin2dec.

: str = dec2base (d, base)

: str = dec2base (d, base, len)

: str = dec2base (d, base, len, decimals)

値dに対応する基数baseのシンボルの文字列を返します。

dec2base (123, 3)
  ⇒ "11120"

dが負の場合、結果はd を補数表記で表します。たとえば、負の 2 進数は 2 の補数で表され、他の基数でも同様です。

dが行列またはセル配列の場合、 dの要素ごとに 1 行の文字列行列を返します。先頭にゼロが埋め込まれ、最大値の幅になります。

baseが文字列の場合、 baseの文字がdの数字のシンボルとして使用されます。空白 (スペース、タブ、改行など) はシンボルとして使用できません。

dec2base (123, "aei")

  ⇒ "eeeia"

オプションの 3 番目の引数lenは、結果の整数部分の最小桁数を指定します。これを省略すると、 dec2base入力に対応するのに十分な桁数が使用されます。

オプションの 4 番目の引数、decimals は、入力の小数部を表す桁数を指定します。省略すると、ゼロに設定され、dec2base下位互換性のために整数出力が返されます。

dec2base (100*pi, 16)
⇒ "13A"
dec2base (100*pi, 16, 4)
⇒ "013A"
dec2base (100*pi, 16, 4, 6)
⇒ "013A.28C59D"
dec2base (-100*pi, 16)
⇒ "EC6"
dec2base (-100*pi, 16, 4)
⇒ "FEC6"
dec2base (-100*pi, 16, 4, 6)
⇒ "FEC5.D73A63"

プログラミングのヒント: に負の入力を渡す場合はdec2base、必要な出力の長さを明示的に指定するのが最適です。

See also: base2dec, dec2bin, dec2hex.

: d = base2dec (str, base)

str を基数base の数字の文字列から10 進整数 (基数 10) に 変換します。

base2dec ("11120", 3)
  ⇒ 123

strが文字列行列の場合、 strの行ごとに 1 つの値を持つ列ベクトルを返します。行に無効な記号が含まれている場合、対応する値は NaN になります。

strが文字列のセル配列の場合、 str内のセルの要素ごとに 1 つの値を持つ列ベクトルを返します。

baseが文字列の場合、 baseの文字がstrの数字のシンボルとして使用されます。スペース (' ') はシンボルとして使用できません。

base2dec ("yyyzx", "xyz")
  ⇒ 123

See also: dec2base, bin2dec, hex2dec.

: s = num2hex (n)

: s = num2hex (n, "cell")

数値配列を 16 進文字列の配列に変換します。

For example:

num2hex ([-1, 1, e, Inf])
⇒ "bff0000000000000
   3ff0000000000000
   4005bf0a8b145769
   7ff0000000000000"

引数nが単精度数またはベクトルの場合、返される文字列の長さは 8 になります。例:

num2hex (single ([-1, 1, e, Inf]))
⇒ "bf800000
   3f800000
   402df854
   7f800000"

オプションの 2 番目の引数を使用すると"cell"、文字配列ではなく文字列のセル配列が返されます。

See also: hex2num, hex2dec, dec2hex.

: n = hex2num (s)

: n = hex2num (s, class)

16 進文字配列または文字列のセル配列を数値配列に型変換します。

デフォルトでは、入力配列は倍精度値を表す 16 進数として解釈されます。 16 文字未満が指定された場合、文字列の右側に'0'文字が埋め込まれます。

文字列行列が与えられた場合、hex2num各行を個別の数値として扱います。

16進数2進数(["4005bf0a8b145769"; "40240000000000000"])

  ⇒ [2.7183; 10.000]

オプションの2番目の引数クラスは、入力配列を異なる値型として解釈するために使用できます。可能な値は次のとおりです。

Option	Characters
"int8"	2
"uint8"	2
"int16"	4
"uint16"	4
"int32"	8
"uint32"	8
"int64"	16
"uint64"	16
"char"	2
"single"	8
"double"	16

For example:

hex2num (["402df854"; "41200000"], "single")
  ⇒ [2.7183; 10.000]

See also: num2hex, hex2dec, dec2hex.

: [a, …] = strread (str)

: [a, …] = strread (str, format)

: [a, …] = strread (str, format, format_repeat)

: [a, …] = strread (str, format, prop1, value1, …)

: [a, …] = strread (str, format, format_repeat, prop1, value1, …)

この関数は廃止されました。textscan代わりに を使用してください。

文字列からデータを読み取ります。

文字列strは、 formatの指定子に繰り返し一致する単語に分割されます。最初の単語は最初の指定子に一致し、2 番目の単語は 2 番目の指定子に一致し、以下同様に続きます。指定子よりも単語の数が多い場合は、すべての単語が処理されるまでこのプロセスが繰り返されます。

文字列形式は、 str内の単語をどのように解析するかを記述します。次の指定子の任意の組み合わせを含めることができます。

%s

単語は文字列として解析されます。

%f
%n

単語は数値として解析され、double に変換されます。

%d
%u

語は数値として解析され、int32 に変換されます。

%*
%*f
%*s

単語はスキップされます。

%s および %d、%f、%n、%u および関連する %*s … 指定子の場合、オプションの幅を %Ns などで指定できます。ここで、N は 1 より大きい整数です。%f の場合、%N.Mf のような書式指定子が許可されます。

literals

さらに、フォーマットにはリテラル文字列が含まれる場合がありますが、読み取り時にはこれらはスキップされます。

最初の指定子に対応する解析された単語が最初の出力引数に返され、残りの指定子についても同様です。

デフォルトでは、formatは であり、数値はstr"%f"から読み取られることを意味します 。 strに数値フィールドのみが含まれている 場合は、これが当てはまります。

例えば、文字列

str = "\
Bunny Bugs   5.5\n\
Duck Daffy  -7.5e-5\n\
Penguin Tux   6"

を使って読むことができます

[a, b, c] = strread (str, "%s %s %f");

オプションの数値引数format_repeat を使用すると、読み取る項目の数を制限できます。

-1

(デフォルト) 文字列の最後まですべてを読み取ります。

N

nargout項目をN 回読み取ります。 format_repeatの許容値は 0 (ゼロ) です 。

の動作は、strreadプロパティと値のペアによって変更できます。次のプロパティが認識されます。

"commentstyle"

strの一部はコメントとみなされ、スキップされます。value はコメントのスタイルであり、次のいずれかになります。

"shell" 文字から#最も近い行末までのすべてがスキップされます。
"c" と の間のものはすべて/*スキップ*/されます。
"c++" 文字から//最も近い行末までのすべてがスキップされます。
"matlab" 文字から%最も近い行末までのすべてがスキップされます。
ユーザーが指定します。2 つのオプションがあります。(1) 1 つの文字列、または 1x1 セル文字列: その右側にあるものはすべてスキップします。(2) 2x1 セル文字列配列: 左側の文字列と右側の文字列の間にあるものはすべてスキップします。

"delimiter"

値内の任意の文字は、str を単語に分割するために使用されます(デフォルト値 = 任意の空白)。フォーマット変換指定子が指定されていない限り、空白は暗黙的に区切り文字のセットに追加されることに注意してください"%s"。以下のパラメータを参照してください"whitespace"。区切り文字のセットは空にできません。必要な場合は、Octave が区切り文字としてスペースを置き換えます。

"emptyvalue"

空白で区切られていないデータ内の空の数値に対して返される値。デフォルトは NaN です。データ型が NaN をサポートしていない場合 (たとえば、int32)、デフォルトは 0 です。

"multipledelimsasone"

間に空白を入れずに連続する区切り文字を 1 つの区切り文字として扱います。連続する区切り文字は垂直である必要はありません "aligned"。

"treatasempty"

値内の文字列の単一の出現(区切り文字または空白で囲まれている)を欠損値として扱います。

"returnonerror"

値がtrue (1、デフォルト)の場合、読み取りエラーを無視して通常どおり返します。false (0) の場合、エラーを返します。

"whitespace"

値内の文字はすべて空白文字として解釈され、切り詰められます。 などの特殊文字を適切に処理するには、空白文字を定義する文字列を二重引用符で囲む必要があります"\t"。各データ フィールドでは、連続する複数の空白文字は 1 つのスペースにまとめられ、先頭と末尾の空白文字は削除されます。空白文字の既定値は です " \b\r\n\t" (スペースに注意)。少なくとも 1 つの"%s"形式変換指定子が指定されていない限り、空白文字は常に区切り文字のセットに追加されます。その場合、 で明示的に指定された空白文字のみが "delimiter"区切り文字として保持され、空白文字のセットから削除されます。空白文字をそのまま保持する場合 (たとえば、文字列内) は、""に空の値 (つまり ) を指定します"whitespace"。明らかに、その場合、空白文字は区切り文字にできません。

str内の単語数がフォーマット変換指定子の数の正確な倍数と一致しない場合、 strread の動作はstrの最後の文字によって異なります。

last character = "\n"

データ列は空のフィールドまたはNaNで埋められ、すべての列の長さが同じになります。

last character is not "\n"

データ列はパディングされません。strread は長さの異なる列を返します。

See also: textscan, sscanf.