Main Content

テキストの数値への変換

この例では、テキストを、それが表す数値に変換する方法を説明します。通常、このような変換を行う必要があるのは、プロットする数値や計算で使用する数値を表すテキストがある場合です。たとえば、テキストはテキスト ファイルまたはスプレッドシートから取得される場合があります。MATLAB® にインポートするときに数値に変換していない場合は、この例に示す関数を使用できます。

string 配列、文字ベクトル、および文字ベクトルの cell 配列を数値に変換できます。テキストは 16 進数値または 2 進数値を表すことができますが、数値に変換すると、10 進数値として保存されます。日付と時刻を表すテキストを datetime 値または duration 値に変換することもでき、これらを数値のように扱うことができます。

倍精度値

テキストから倍精度値への推奨される変換方法は、関数 str2double を使用することです。文字ベクトル、string 配列、および文字ベクトルの cell 配列を変換できます。

たとえば、一重引用符を使用して文字ベクトルを作成し、それが表す数値に変換します。

X = str2double('3.1416')
X = 3.1416

入力引数が string 配列または文字ベクトルの cell 配列である場合、str2double はこれを、同じサイズの数値配列に変換します。string は二重引用符を使用して作成できます (string は string データ型をもち、文字ベクトルは char データ型をもちます)。

str = ["2.718","3.1416";
       "137","0.015"]
str = 2x2 string
    "2.718"    "3.1416"
    "137"      "0.015" 

   X = str2double(str)
X = 2×2

    2.7180    3.1416
  137.0000    0.0150

関数 str2double は、コンマ (3 桁ごとの区切りとして) と小数点を含むテキストを変換できます。たとえば、str2double を使用して、以下の table の変数 Balance を変換できます。Balance は、コンマを 3 桁ごとの区切りとして使用して、数値を string として表します。

load balances
balances
balances=3×2 table
    Customer       Balance  
    _________    ___________

    "Diaz"       "13,790.00"
    "Johnson"    "2,456.10" 
    "Wu"         "923.71"   

T.Balance = str2double(T.Balance)
T=3×2 table
    Customer     Balance
    _________    _______

    "Diaz"        13790 
    "Johnson"    2456.1 
    "Wu"         923.71 

str2double がテキストを数値に変換できない場合、NaN 値を返します。

関数 str2num はテキストを数値に変換することもできますが、推奨はされませんstr2num は関数 eval を使用しますが、これが原因で、テキスト入力に関数名が含まれている場合に意図しない副作用が発生する可能性があります。このような問題を回避するには、str2double を使用します。

代わりに、関数 double を使用して string を倍精度値に変換することができます。入力が string 配列の場合、double は、str2double と同様に、同じサイズの数値配列を返します。ただし、入力が文字ベクトルである場合は、double は個々の文字を、それぞれの Unicode® 値を表す数値に変換します。

X = double("3.1416")
X = 3.1416
X = double('3.1416')
X = 1×6

    51    46    49    52    49    54

次のリストに、テキストを数値に変換する場合のベスト プラクティスをまとめます。

  • テキストを数値に変換する場合は、関数 str2double を使用します。これは、string 配列、文字ベクトル、文字ベクトルの cell 配列を一貫して扱います。

  • また、string 配列には関数 double を使用することもできます。ただし、文字ベクトルは扱いが異なります。

  • str2num回避してください。これは、意図しない結果をまねく可能性のある関数 eval を呼び出します。

16 進数値と 2 進数値

16 進数と 2 進数を、テキストとして、または "リテラル" として表すことができます。リテラルとして記述する場合は、接頭辞 0x および 0b を使用しなければなりません。テキストとして表現してから変換する場合は、接頭辞は使用できますが、必須ではありません。

たとえば、16 進数をリテラルとして記述します。接頭辞は必須です。

D = 0x3FF
D = uint16
    1023

次に、同じ値を表すテキストを、関数 hex2dec を使用して変換します。接頭辞は認識されますが、必須ではありません。

D = hex2dec('3FF')
D = 1023
D = hex2dec('0x3FF')
D = 1023

2 進数値を表すテキストを、関数 bin2dec を使用して変換します。

D = bin2dec('101010')
D = 42
D = bin2dec('0b101010')
D = 42

日付と時刻

MATLAB では、日付と時刻を保存するため、またそれらを数値として扱うために、datetimeduration のデータ型が提供されています。日付と時刻を表すテキストを変換するには、関数 datetime および duration を使用します。

日付を表すテキストを datetime 値に変換します。関数 datetime は、日付と時刻の多くの一般的な書式を認識します。

C = '2019-09-20'
C = 
'2019-09-20'
D = datetime(C)
D = datetime
   20-Sep-2019

日付と時刻を表す配列を変換できます。

str = ["2019-01-31","2019-02-28","2019-03-31"]
str = 1x3 string
    "2019-01-31"    "2019-02-28"    "2019-03-31"

D = datetime(str)
D = 1x3 datetime
   31-Jan-2019   28-Feb-2019   31-Mar-2019

テキストを duration 値に変換する場合は、hh:mm:ss または dd:hh:mm:ss の書式を使用します。

D = duration('12:34:56')
D = duration
   12:34:56

参考

| | | | | |

関連するトピック