eminus hatena lab

技術系のメモと解説

LabVIEWで電卓を作る(7): キー入力を処理して画面に表示する部分

前回はこちら

 

eminus.hatenablog.com

仕様

  • 0,1,2,3,4,5,6,7,8,9,-2いずれかの数字をキー入力として受け取る
  • 0-9はそれぞれの数字のキー入力、-2はドット(小数点)を表すことにする
  • また、現在画面表示されている数値の文字列も受け取る
  • 基本的には受け取ったキー入力を入力文字列の後ろに追加して返す
  • ただし結果が「00」や「01」等となる場合、頭の0は消す
  • ドット「.」が既に存在する場合は「.」の入力を無視する

解説

まずは素直に文字を連結する。StringのConcatenate Stringってやつ。また、キー入力を文字列に戻すのはFormat Into Stringでやるのが普通だが、ASCIIコード48が「0」に対応するのを利用してキーコード-2から9に48を足し、要素数1の配列を作り、Byte Array To Stringで長さ1の文字列に変換している。もちろんキーコードが-2から9に限られることを既に知っているからできること

次に条件分岐の部分は次のようなロジック

『「キーコードが-2」かつ「入力文字列にドットが含まれる」』が真なら何もしない。偽なら上記の処理を行う。とある文字列にある部分文字列が含まれるかどうかは文字列検索をして、Offset Past Matchが0以上の整数なら含まれていることが分かる。

最後に後処理として先頭のゼロを消す方法は正規表現の置換で実装している

意味は以下の通り

^0+ : 先頭の1個以上のゼロ

(?=xxx): 肯定的先読み(xxxをその先に含む場合にマッチ。xxxはマッチ範囲にふくまない)

\d+ : 1文字以上の数字

f:id:eminus:20190419215621p:plain

今回のあとがき

やっと時間がとれたので続きを。D3のこの時期に忙しいというとあれなのだが、何週間か前に終えてたまっていた実験なども進み始めて、時間に余裕が出てきた

最近解析プログラムをPyQtで作るのにはまっている。ファイルダイアログとかLinux版のLabVIEWがなんか使いにくいっていうのと、単に趣味