Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

OctaveでJSONファイルをパースする

みんな大好きJSONファイル
ネット配布情報なんかはJSONが多いですし、
XMLよりは視覚的に易しい構造なので設定ファイルとしても有用。

実際のところ

Ubuntuに導入

パッケージを更新

$ sudo add-apt-repository ppa:fangq/ppa
$ sudo apt update

導入

$ sudo apt install octave-jsonlab

Debianでは安定していない様子。

Windowsとか

ファイルのあたまにパスを指定して読み取りする。

addpath('/path/to/jsonlab');

つかう

jsonlabをgithubやzipから引っ張ってきたのであればexampleの中にJSONファイルがあるので
お試しではこれを使います。

jsondata = loadjson('/path/to/jsonlab/examples/example1.json');

読み出しはメソッド読み出し風

disp(jsondata.age);
%>> 25

書き込みもこんな調子

jsondata.age = 999;

disp(jsondata.age);
%>> 999

ネストしたのはドットチェイン

jsondata.address.city

OctaveでBLE接続する実験

MatlabにはBLEで接続できる実装が揃っています。

で、OctaveにはシリアルだのSPIだのの通信系が揃っています。
ならBLEをOctaveでも使えるのでは? というメモ書き

実際のところ

今書いてまs

OctaveのGUIで「 nested functions not implemented in this context」とか言われたら

error: parse error near line 23 of file C:\Users\shiro\octGUI.m

  nested functions not implemented in this context

構成は何も変えていないのに、なぜかちゃんと認識されてない

これをCLIの方にブチ込んでGUIのメイン関数相当を実行したら、なぜか動く。


あれこれやった結果、内部関数を外だしするのが一番確実なエラーつぶしパターンである模様。
……バッドノウハウの臭いがしますが、今は追っている時間がない……無念

octave外部アプリケーション、またはコマンドを実行する

外部コマンド実行は定番中の定番ですね。
MatlabOctaveにも、それが備わっています。
外でつくったPythonスクリプトを動かしたり、lsコマンドでディレクトリみたり。

実際のところ

簡易記法の「!cmd」は実装されていないようなので、注意。

uicontrolではフツーにコールバックを記述。

    configButton  = uicontrol(fbase,'Style','pushbutton',...
                         'String','Config','Position',[50,500,300,100],...
                         'Callback',@configbutton_Callback);

メモ帳でconfig.txtを開くには、以下のように。

function configbutton_Callback (source, eventdata)
  status = system('notepad config.txt&');
endfunction

参考もと

jp.mathworks.com