FREADYAML¶
Category: ファイル操作
書式¶
FREADYAML( path [, charset] )
引数¶
| Parameter | Description |
|---|---|
| path | 読み込む YAML ファイルのパス(yaya.dll からの相対パス、または絶対パス) |
| charset | ファイルの文字コード(省略可)。文字列("UTF-8" "Shift_JIS" など)または数値で指定する。省略時は UTF-8 |
戻り値¶
- 成功時: YAML を変換した値(下記の 値の対応)
- 失敗時: 空(VOID)
解説¶
YAML ファイルを丸ごと読み込んで解析し、ハッシュ・配列などの値にして返す。FOPEN で開いておく必要はない。
YAML の解析は YAYA が自前で行う。設定ファイルなどでよく使われる範囲(下記の 対応している書き方)に対応したもので、YAML の仕様をすべて満たしてはいない。
- 先頭の UTF-8 の BOM は無視する。改行は CRLF / LF のどちらでもよい
- 空のファイルや、コメントだけのファイルは空(VOID)になる。エラーにはならない
対応している書き方¶
| 書き方 | 例 |
|---|---|
| ブロック形式のマッピング・シーケンス | key: value、- item。key: の下に同じ桁で - item を並べる書き方も可 |
| フロー形式 | [1, 2]、{a: 1, b: 2}。入れ子や、複数行にわたる書き方も可 |
| クォートなしの文字列 | 複数行にわたってもよい(改行は空白になり、空行は改行になる) |
| クォート付きの文字列 | '...'('' で ')、"..."(\n \t \" \\ \x41 あ \U0001F600 などのエスケープ) |
| ブロックスカラー | |(改行をそのまま残す)、>(改行を空白にする)。末尾の改行の扱い |- |+、字下げの指定 |2 も可 |
| コメント | # から行末まで(値の後に書くときは # の前に空白が必要) |
| アンカーとエイリアス | &name を付けた値を *name で参照する(値を複製する) |
| マージキー | <<: *name や <<: [*a, *b] でマッピングを取り込む。明示したキーと、先に書いたものが優先 |
| 文書の区切り | 先頭の ---(と、その前の %YAML などのディレクティブ)、末尾の ... |
| タグ | !!str(と !)は文字列にする。!!int !!float !!bool !!null はクォートされていても型を決める。ほかのタグは無視する |
次のものには対応していない。書かれていると W0026 になる。
- 1つのファイルに複数の文書(2つ目の
---) - 複合キー(
?で始まるキー、キーにフロー形式を書いたもの) - 字下げにタブを使ったもの(値の中のタブは使える)
値の対応¶
型は YAML 1.2 の Core Schema の規則で決める。
| YAML | YAYA |
|---|---|
| マッピング | ハッシュ。キーは常に文字列 |
| シーケンス | 汎用配列(要素に配列やハッシュを含む入れ子になる) |
整数(123 -4 0o17 0x1F) |
整数。10進で整数の範囲を超えるものは実数 |
実数(1.5 1e3 .5 .inf -.inf .nan) |
実数 |
true / false(True TRUE なども) |
整数 1 / 0 |
null / ~ / 値なし |
空(VOID) |
| それ以外・クォート付き・ブロックスカラー | 文字列 |
- YAML 1.1 の処理系とは次の点が違う。
yesnoonoffは文字列、017は 10 進の 17、1_000は文字列、2001-12-14のような日付も文字列になる - マッピングのキーの並びは保たれない。ハッシュのキーの順になる(HASH_KEYS を参照)。
1のような正規形の整数のキーはh[1]でもh["1"]でも引ける - 同じキーが2回書かれていたら、後に書いたほうになる
- 深い入れ子(256 段を超えるもの)と、エイリアスの複製が合計 100 万要素を超えるものはエラーにする(悪意のあるファイルでメモリを使い果たさないため)
エラー¶
| 状況 | 警告 | GETLASTERROR |
|---|---|---|
| 引数がない | W0008 | 8 |
| path が文字列でない | W0009 | 9 |
| charset が不正 | W0012 / W0009 | 12 / 9 |
| ファイルを開けない | W0025 | 25 |
| YAML として解析できない、対応していない書き方 | W0026(行番号と原因も出力する) | 26 |
使用例¶
config.yaml:
# ゴーストの設定
name: さくら
age: 17
height: 158.5
visible: true
memo: ~
tags: [ghost, shell]
talk:
greeting: |
こんにちは。
今日もいい天気ですね。
random:
- おはよう
- こんばんは
defaults: &defaults
volume: 80
speed: 2
voice:
<<: *defaults
speed: 3
_y = FREADYAML("config.yaml")
_y["name"] // さくら
_y["tags"][1] // shell
_y["height"] // 実数の 158.5
_y["visible"] // 1
_y["memo"] // 空(VOID)
_y["talk"]["greeting"] // "こんにちは。" + 改行 + "今日もいい天気ですね。" + 改行
_y["talk"]["random"][0] // おはよう
_y["voice"]["volume"] // 80(defaults から取り込んだもの)
_y["voice"]["speed"] // 3
互換性¶
- YAYA: Tc602-5以降