【ハードウェア制御でよく使う】LabVIEWで文字列を数値データに変換する方法

基本機能

このページではLabVIEWの文字列(String)を数値(Numeric)に変換する方法を紹介します。ハードウェアから読み取った信号は多くの場合に文字列データです。この文字列を数値にデータ型変換することで、データとして様々な分析を行うことができるようになります。

いくつかの「文字列を数値に変換する関数」たち

下の図の赤で囲った4つがそれらの関数です。

文字列を数値に変換する関数は、ブロックダイアグラムで右クリックして「Function」→「String」→「Number/String Conversion」とマウスポインタを動かしていくと表示することができます

図1.4つの「文字列を数値に変換する」関数

変換先の数値の形式によって4つの種類があります。下の表1に4つのアイコンと名前を示しています。LabVIEW Community Editionでは英語表記のため、参考のため、日本語名も記載しています。

日本語名からわかるように、変換先の数値が10進数、16進数、8進数、小数表示or指数表示によって関数を使い分けます。

次の段落で、具体的な使い方を紹介します。

アイコン英語名日本語名
Decimal String to Number10進数文字列を数値に変換
Hexadecimal String to Number16進数文字列を数値に変換
Octal String to Number8進数文字列を数値に変換
Fract/Exp String to Number
小数/指数文字列を数値に変換
表1.4種類の「文字列を数値に変換する」関数

データ型についてはこちらのページで詳しく説明していますので、参考にしてみてください。

基本の使い方

ここでは、使う頻度が高い10進数文字列の変換(Decimal String to Number)と、小数文字列/指数文字列の変換(Fact/Exp String to Number)を例に取って使い方を紹介します。

10進数文字列を数値に変換する方法

Decimal String to Numberは以下のような配線になっています。アイコンの左側が入力端子(関数の引数に相当するもの)、右側が出力端子です。

左上には「String(変換したい文字列)」を入力します。文字列型(String)ですので配線はピンク色です。

左中段は「offset(左から何文字目から数値に変換するかのオフセット)」を入力します。入力値は長整数型(Numeric Long)で配線は青色です。何も入力しない場合(デフォルト値)は0です。少しわかりにくいと思うので、下の具体例を見てもらえるとよいと思います。

左下段は「default(変換するデータ型を指定する番号」)を入力します。基本の使い方なら、何も入力しなくてもOKです。

右下段は「number(変換された数値)」が出力されます。基本の使い方では、変換後の数値は長整数型(Numeric Long)で青色配線となります。

右上段は「offset past number(変換された数字の一番小さい桁が、入力した文字列の何番目の文字か)」が出力されます。こちらも少しわかりにくいと思うので、下の具体例を見てもらえるとよいと思います。

図2.Decimal String to Number関数の配線

以下で、具体的にこの関数を使った例を示します。

図3は、変換する文字列として「125」を入力した場合のプログラムを動作させた結果です。Offsetには接続していないので、デフォルト値「0」が入っているとみなされます。

この場合の出力値numberはフロントパネルに示されるように「125」となっています。このように、文字列の「125」が、長整数の「125」に変換できていることがわかります。

右上の出力値offset past numberは「3」となっています。これは、変換後の125の一番小さい桁(1の位)が、入力文字列「125」の3番目の文字だということを示しています。

ここでは正の値を例にしていますが、文字列に「- (ハイフン)」が含まれる場合はそれをマイナス符号と認識することで負の数値文字列も数値に変換することができます

図3.数字の文字列のみを変換した場合

図3の例では入力は数字のみの文字でしたが、「数字と数字以外の文字列」を入力することも可能です。図4は変換する文字列として「125mA」を入力した場合のプログラムを動作させた結果です。

この場合は、入力文字列のうち数字の部分「125」のみがnumberとして出力されています。

※ なお、mAは電流の単位であるミリアンペアをイメージしています。電流計から値を読み出した場合に、出力文字列がこのように単位などの文字を含んでいる場合があることを想定しています。

図4.数字と非数字からなる文字列を変換した場合

図5は、変換する文字列として「I=125mA」を入力した場合のプログラムを動作させた結果です。

この場合は、numberの出力は「0」となり狙ったような変換ができていません。この理由は、「入力文字列の何番目から文字列変換するか」というパラメータであるoffsetを入力していないため(デフォルト値「0」が入力されたため)です。

図5.非数字から始まる文字列をoffset指定なしで変換した場合

変換したい数字「125」のはじめの数字1は、入力文字列の3文字目です。番号は0,1,2と数えるので、この場合はoffset=2と指定すればうまくいきます。

図6にOffset=2と指定して動作させた結果を示します。numberの出力は「125」と正しく変換できています。

図6.非数字から始まる文字列をoffset指定ありで変換した場合

小数文字列を数値に変換する方法

小数文字列を数値に変換する場合は、Fract/Exp String to Numberを用います。この関数は以下のような配線になっています。アイコンの左側と上側が入力端子、右側が出力端子です。

左上には「String(変換したい文字列)」を入力します。文字列型(String)ですので配線はピンク色です。

左中段は「offset(左から何文字目から数値に変換するかのオフセット)」を入力します。これは前節のDecimal String to Numberで説明したものと同じ機能です。

左下段は「default(変換するデータ型を指定する番号」)を入力します。上側は「システムの小数点設定を使用するかどうかのBoolian」を入力します。基本の使い方なら、これらには何も入力しなくてもOKです。

右下段は「number(変換された数値)」が出力されます。基本の使い方では、変換後の数値は倍精度浮動小数点型(Numeric Double)で橙色配線となります。

右上段は「offset past number(変換された数字の一番小さい桁が、入力した文字列の何番目の文字か)」が出力されます。こちらもDecimal String to Numberで説明したものと同じ機能です。

図7.Fract/Exp String to Number 関数の配線

図8は、変換する文字列として「I=2.5mA」、offsetには文字列の中で数字が何番目に始まるかを示す「2」を入力した場合のプログラムを動作させた結果です。

この場合の出力値numberはフロントパネルに示されるように「2.5」となっています。このように、文字列の「2.5」が、倍精度浮動小数点型の「2.5」に変換できていることがわかります。

図8.小数文字列の倍数度浮動小数型 数値への変換

指数表記文字列を数値に変換する方法

指数表記文字列を数値に変換する場合は、Fract/Exp String to Numberを用います。配線は図7に示す通りです。

指数表記(Exponential notation)とは、数値を「小数E(10のべき乗数)」と表記する方法です。例えば、0.012を1.2E-3と記載したり、-2200を-2.2E3と記載する方法です。小数の部分は、0以上10未満にすることが一般的です。非常に大きな数または非常に小さな数を表記するのに便利で、科学技術分野で多用されることから科学的表記(Scientific notation)とも呼ばれます。

数学的には指数表記として1.2×10-3のような記載もありますが、表記のために上付きの数字が必要であるため計算機で扱うには向きません。1.2E-3のようなEを用いた指数表記のみをLabVIEWでは扱います

図9は、変換する文字列として「I=2.5E-3A」、offsetには文字列の中で数字が何番目に始まるかを示す「2」を入力した場合のプログラムを動作させた結果です。(ここでIは電流のこと、Aは電流の単位であるアンペアを想定しています。)

この場合の出力値numberはフロントパネルに示されるように「0.0025」となっています。このように、文字列の「2.5E-3」が、倍精度浮動小数点型の「0.0025」に変換できていることがわかります。

図9.指数関数表示文字列の倍精度浮動小数型 数値への変換

複数の文字列を一度に変換する方法

これまでは文字列データ1つを変換しましたが、複数の文字列が配列やクラスタとしてまとまったデータの変換も可能です。

文字列配列を数値配列に変換する方法

変換関数の入力のStringに文字列配列を入力することで、文字列配列を数値配列に変換することができます。

図10は、変換する文字列として「1.2, 1.5, 2,4」からなる1次元文字列配列を入力した場合のプログラムを動作させた結果です。この場合の出力値numberはフロントパネルに示されるように「1.2, 1.5, 2,4」となっています。このように、文字列配列が、倍精度浮動小数点型の数値配列に変換できていることがわかります。

ここでは1次元文字列配列を入力しましたが、文字列配列の次元は任意のものを選ぶことができます。

図10.文字列配列を数値配列に変換する例

文字列クラスタを数値クラスタに変換する方法

変換関数の入力のStringに文字列クラスタを入力することで、文字列配列を数値クラスタに変換することができます。

図11は、変換する文字列として「1.2, 1.5, 2,4」からなる文字列クラスタを入力した場合のプログラムを動作させた結果です。この場合の出力値numberはフロントパネルに示されるように「1.2, 1.5, 2,4」となっています。このように、文字列配列が、倍精度浮動小数点型の数値クラスタに変換できていることがわかります。

図11.文字列クラスタを数値クラスタに変換する例

ただし、入力クラスタは文字列のみから構成される必要があります。入力クラスタの中に文字列以外の要素が含まれる場合は、図11のようにエラーが生じます。

図11.文字列以外を含むクラスタを入力するとエラーが生じる例

まとめ

この記事では、文字列を数値に変換する方法について紹介しました。

  • ハードウェアから読み取った文字列データを数値にデータ型変換することで、データとして様々な分析を行うことができるなど、数値へのデータ変換は重要な機能
  • 文字列を数値に変換する関数は、ブロックダイアグラムで右クリックして「Function」→「String」→「Number/String Conversion」で表示
  • 変換先の数値の形式によって4つの種類がある
  • よく使うものとして、10進数文字列を数値に変換する場合はDecimal String to Number、小数文字列/指数表示文字列の変換にはFact/Exp String to Numberを用いる
  • どの変換関数でも、アイコンの左上には「String(変換したい文字列)」を入力し、右下段から「number(変換された数値)」が出力される
  • 入力文字列には、文字列配列や文字列クラスタを使用することもできる

コメント

タイトルとURLをコピーしました