実用ライブラリシリーズ:設定ファイル

Languages

English version is here : Practical library series : Configuration File

概要

mbedを使って様々なプログラムを設計実装する時、外部から与えられた設定に従って動作させたいことがあります。

例えば、Twitterにつぶやくアプリケーションを設計実装した場合を考えてみましょう。

Twitterのアカウント情報をプログラムに埋め込むとpublishする時に面倒ですし、セキュリティ上も好ましいとは言えません。

そこで、今回はmbedのローカルファイルシステムに設定ファイルを保存しておき、それらを簡単に読み取ることのできるクラスを実現してみました。

これならば、様々な情報をプログラムに直接埋め込むのではなく、外部に設置した設定ファイルから読み込んで利用することができます。

基本コンセプト

特徴

この設定ファイルライブラリには以下の特徴があります。

  • 「キー」、「バリュー」を対にして読み込むことができます。
  • 読み込みと書き込みに対応しています。
  • 設定ファイルにはコメントを付けることができます。コメントは読み込み時に無視されます。

ライブラリ

クラス構成

クラスは

ConfigFile

という単一のクラスで構成されています。

プロジェクト

関連するプロジェクトはConfigFileConfigFile_TestProgramの2つです。

ライブラリはConfigFileにあります。このライブラリは他のプログラムでそのまま使うことができるようにmbedのライブラリ及びテストプログラムは含んでいません。

テストプログラムを実行してみたい時にはConfigFile_TestProgramを使って下さい。

使い方

設定ファイル

まずは設定ファイルを作成します。

  • #記号で始めた行はコメント行として無視されます。
  • 空行は無視されます。
  • 「キー」と「バリュー」を=記号で結びます。
  • 「キー」と「バリュー」の前後にあるスペースも意味のあるもの(文字列)として扱われます。
#
# Configuration file for mbed.
#

MyKey1=This is a value for key1.
MyKey2=Value 2

Message1 = This is a test message no.1
 Message2  =  This is a test message no.2
  Message3   =   This is a test message no.3

読み込み

以下の例はmbedのローカルファイルシステムに置かれたinput.cfgファイルを読み込む例です。

MyKeyというキーに対しての値を取得するコードです。

#include "mbed.h"
#include "ConfigFile.h"
 
LocalFileSystem local("local");
ConfigFile cfg;

int main(void) {
    char *key = "MyKey";
    char value[BUFSIZ];
    /*
     * Read a configuration file from a mbed.
     */
    if (!cfg.read("/local/input.cfg")) {
        error("Failure to read a configuration file.\n");
    }

    /*
     * Get a configuration value.
     */
    if (cfg.getValue(key, &value[0], sizeof(value))) {
        printf("'%s'='%s'\n", key, value);
    }
}
  • 設定ファイル内のコメントは無視されます。
  • 設定ファイル内の空行は無視されます。
  • キーやバリューの前後にあるスペースは意味のあるものとして解釈されます。。
  • キーやバリューの中にあるスペースは意味のあるものとして解釈されます。

書き込み

以下は値を設定してファイルに書き込む際の例です。

MyKeyに対してTestValueを設定して書き込みを行います。

#include "mbed.h"
#include "ConfigFile.h"
 
LocalFileSystem local("local");
ConfigFile cfg;

int main(void) {

    /*
     * Set a configuration value.
     */
    if (!cfg.setValue("MyKey", "TestValue")) {
        error("Failure to set a value.\n");
    }    

    /*
     * Write to a file.
     */
    if (!cfg.read("/local/output.cfg")) {
        error("Failure to write a configuration file.\n");
    }
}

まとめ

本文書ではmbedを使ったアプリケーションを構成する上で便利な設定ファイル読み込みクラスの解説をしました。


3 comments

18 Sep 2010

ちょうどやりたいことだったので助かりました。

「キー」、「バリュー」を遂にして読み込むことができます。

「キー」、「バリュー」をにして読み込むことができます。

でしょうか。

18 Sep 2010

Shinichi Ohki様

御指摘ありがとうございます。

完璧にスペルミスでした。 ^^;

助かります。

Shinichiro Nakamura

11 Nov 2012
「書き込み」List line 19 19 if (!cfg.read("/local/output.cfg")) { ^^^^ 19 if (!cfg.write("/local/output.cfg")) { ^^^^^ の間違いですね?

You need to log in to post a comment