MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
Qtの基礎 - TOMLのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
Qtの基礎 - TOML
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == TOML (Tom's Obvious, Minimal Language) は、設定ファイルフォーマットとして設計された。<br> QtでTOMLを使用することは、アプリケーションの設定や構成を管理する上で有効である。<br> <br> TOMLの特徴として、人間が読み書きしやすい形式であることが挙げられる。<br> キーと値のペアを基本構造とし、階層的なデータ構造も表現することができる。<br> <br> 日付や時刻、真偽値、数値等、様々なデータ型をサポートしている。<br> <br> Qtには組み込みのTOMLパーサーが存在しないため、サードパーティ製ライブラリを使用する必要がある。<br> 一般的に、<u>toml11ライブラリ</u>や<u>toml++ライブラリ</u>等のサードパーティ製ライブラリがよく使用されている。<br> これらのライブラリを使用することにより、TOMLファイルの読み込み、書き込み、データの解析が容易になる。<br> <br> TOMLの構文は、基本的な形式は<code><キー> = <値></code>のペアで記述する。<br> セクションを使用してデータをグループ化することもでき、これはブラケット<code>[]</code>で囲むことで表現する。<br> <br> TOMLを使用するメリットとして、設定の管理が容易になることが挙げられる。<br> 例えば、アプリケーションの起動時にTOMLファイルから設定を読み込み、実行時に変更された設定をTOMLファイルに書き込むような使用方法が考えられる。<br> <br> TOMLは他の設定ファイル形式 (JSONやYAML等) と比較して、より直感的で読みやすい構文を持っている。<br> 特に複雑な階層構造を持つ設定データを扱う場合に、そのメリットが発揮される。<br> <br> ただし、TOMLを使用する場合は、選択したライブラリの依存関係管理やパフォーマンスへの影響を考慮する必要がある。<br> <br><br> == TOMLの構文 == TOMLファイルの主な構文要素を以下に示す。<br> <br> * キーと値のペア *: 基本的な形式は、<code><キー名> = <値></code> である。 *: 例: <code>name = "TOML Example"</code> *: <br> * 文字列 ** 基本文字列 **: ダブルクォートで囲む **: <code>"Hello"</code> ** リテラル文字列 **: シングルクォートで囲む **: <code>'C:\Users\username'</code> *: <br> * 数値 ** 整数 **: <code>42</code> ** 浮動小数点 **: <code>3.14</code> *: <br> * ブーリアン *: true または false *: <br> * 日付と時刻 *: ISO 8601形式を使用する。 *: 例: <code>date = 2023-03-27T15:32:00Z</code> *: <br> * 配列 *: 角括弧で囲む。 *: 例: <code>colors = [ "red", "yellow", "green" ]</code> *: <br> * テーブル (セクション) *: 角括弧で囲んだ名前で定義する。 *: 例: *: <syntaxhighlight lang="toml"> [database] server = "192.168.1.1" ports = [ 8001, 8001, 8002 ] </syntaxhighlight> *: <br> * インラインテーブル *: 中括弧で囲む。 *: 例: <code>point = { x = 1, y = 2 }</code> *: <br> * テーブルの配列 *: 2重の角括弧で定義する。 *: 例: *: <syntaxhighlight lang="toml"> [[fruits]] name = "apple" [[fruits]] name = "banana" </syntaxhighlight> *: <br> * コメント *: シャープ記号 (<code>#</code>) を使用する。 <br><br> == 同期処理 == ==== TOMLの読み込み ==== 以下の例では、toml++ライブラリを使用して、TOMLファイルを読み込んでいる。<br> toml++ライブラリを使用する場合は、プロジェクトにtoml++ライブラリをリンクする必要がある。<br> <br> <syntaxhighlight lang="c++"> #include <QFile> #include <QTextStream> #include <stdexcept> #include <toml++/toml.h> class TomlHandler { public: TomlHandler() = default; // TOMLファイルを読み込む toml::table readToml(const QString &filename) { try { return toml::parse_file(filename.toStdString()); } catch (const toml::parse_error &err) { throw std::runtime_error(QString("TOMLファイルの解析エラー: %1").arg(err.description().c_str()).toStdString()); } } // TOMLデータから特定の値を取得 (テンプレート関数) template<typename T> T getValue(const toml::table &data, const QString &key) { try { return data[key.toStdString()].value<T>(); } catch (const toml::type_error &err) { throw std::runtime_error(QString("値の取得エラー: %1").arg(err.what()).toStdString()); } } }; </syntaxhighlight> <br> 以下の例では、上記のクラスを使用してTOMLファイルを読み込んでいる。<br> <br> <syntaxhighlight lang="c++"> #include <QDebug> #include "TomlHandler.h" int main() { TomlHandler handler; try { // TOMLファイルを読み込む auto data = handler.readToml("config.toml"); // 値を取得する QString name = handler.getValue<QString>(data, "name"); int age = handler.getValue<int>(data, "age"); qDebug() << "Name:" << name; qDebug() << "Age:" << age; } catch (const std::exception &e) { qCritical() << "エラー: " << e.what(); return -1; } return 0; } </syntaxhighlight> <br> ==== TOMLファイルの書き込み ==== 以下の例では、toml++ライブラリを使用して、TOMLファイルを書き込んでいる。<br> toml++ライブラリを使用する場合は、プロジェクトにtoml++ライブラリをリンクする必要がある。<br> <br> <syntaxhighlight lang="c++"> #include <QFile> #include <QTextStream> #include <stdexcept> #include <toml++/toml.h> class TomlHandler { public: TomlHandler() = default; // TOMLファイルを読み込む toml::table readToml(const QString &filename) { try { return toml::parse_file(filename.toStdString()); } catch (const toml::parse_error &err) { throw std::runtime_error(QString("TOMLファイルの解析エラー: %1").arg(err.description().c_str()).toStdString()); } } // TOMLデータをファイルに書き込む void writeToml(const QString &filename, const toml::table &data) { QFile file(filename); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { throw std::runtime_error(QString("ファイルオープンエラー: %1").arg(filename).toStdString()); } QTextStream out(&file); out << QString::fromStdString(toml::toml_formatter(data).format()); file.close(); } // TOMLデータから特定の値を取得 (テンプレート関数) template<typename T> T getValue(const toml::table &data, const QString &key) { try { return data[key.toStdString()].value<T>(); } catch (const toml::type_error &err) { throw std::runtime_error(QString("値の取得エラー: %1").arg(err.what()).toStdString()); } } // TOMLデータに値を設定する (テンプレート関数) template<typename T> void setValue(toml::table &data, const QString &key, const T &value) { data[key.toStdString()] = value; } }; </syntaxhighlight> <br> 以下の例では、上記のクラスを使用してTOMLファイルを書き込んでいる。<br> <br> <syntaxhighlight lang="c++"> #include <QDebug> #include "TomlHandler.h" int main() { TomlHandler handler; try { // TOMLファイルを読み込む auto data = handler.readToml("config.toml"); // 値を取得 QString name = handler.getValue<QString>(data, "name"); int age = handler.getValue<int>(data, "age"); qDebug() << "Name:" << name; qDebug() << "Age:" << age; // 値を設定 handler.setValue(data, "location", "Tokyo"); // 変更したデータを書き込む handler.writeToml("config_updated.toml", data); } catch (const std::exception &e) { qCritical() << "エラー: " << e.what(); return -1; } return 0; } </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:Qt]]
Qtの基礎 - TOML
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse