eloquent/fixie

此包已被废弃,不再维护。没有建议的替代包。

基于 YAML 的数据固定。

0.1.0 2014-02-12 13:27 UTC

This package is auto-updated.

Last update: 2023-08-08 04:18:33 UTC


README

不再维护

此包不再维护。有关更多信息,请参阅此声明

Fixie

基于 YAML 的数据固定。

The most recent stable version is 0.1.0 Current build status image Current coverage status image

安装和文档

Fixie 是什么?

Fixie 是一种用于存储表格数据的格式。它结合了 YAMLCSV 的优势,产生一种适合人类和机器读取的语法。

Fixie 语法实际上是 YAML 1.2 的子集,这意味着任何 Fixie 语法的示例也是有效的 YAML。然而,与自由形式的 YAML 不同,所有 Fixie 变体都可以逐行读取,这在使用大量数据时可以最小化内存使用。

输出样式

紧凑样式

默认样式,适用于任何大小的数据集。

columns:
 [name,      symbol, number, weight,     metallic, group                 ]
data: [
 [Hydrogen,  H,      1,      1.00794,    false,    null                  ],
 [Helium,    He,     2,      4.002602,   false,    'Noble gas'           ],
 [Lithium,   Li,     3,      6.941,      true,     'Alkali metal'        ],
 [Beryllium, Be,     4,      9.012182,   true,     'Alkaline earth metal'],
 [Boron,     B,      5,      10.811,     true,     null                  ],
 [Carbon,    C,      6,      12.0107,    false,    null                  ],
 [Nitrogen,  N,      7,      14.0067,    false,    Pnictogen             ],
 [Oxygen,    O,      8,      15.9994,    false,    Chalcogen             ],
 [Fluorine,  F,      9,      18.9984032, false,    Halogen               ],
 [Neon,      Ne,     10,     20.1797,    false,    'Noble gas'           ],
]

展开样式

此样式对于小型数据集很有用,其中更垂直的布局可以改善人类的可读性。

- name:     Hydrogen
  symbol:   H
  number:   1
  weight:   1.00794
  metallic: false
  group:    null

- name:     Helium
  symbol:   He
  number:   2
  weight:   4.002602
  metallic: false
  group:    'Noble gas'

- name:     Lithium
  symbol:   Li
  number:   3
  weight:   6.941
  metallic: true
  group:    'Alkali metal'

- name:     Beryllium
  symbol:   Be
  number:   4
  weight:   9.012182
  metallic: true
  group:    'Alkaline earth metal'

- name:     Boron
  symbol:   B
  number:   5
  weight:   10.811
  metallic: true
  group:    null

- name:     Carbon
  symbol:   C
  number:   6
  weight:   12.0107
  metallic: false
  group:    null

- name:     Nitrogen
  symbol:   N
  number:   7
  weight:   14.0067
  metallic: false
  group:    Pnictogen

- name:     Oxygen
  symbol:   O
  number:   8
  weight:   15.9994
  metallic: false
  group:    Chalcogen

- name:     Fluorine
  symbol:   F
  number:   9
  weight:   18.9984032
  metallic: false
  group:    Halogen

- name:     Neon
  symbol:   Ne
  number:   10
  weight:   20.1797
  metallic: false
  group:    'Noble gas'

输出样式变体

Fixie 实现了多种输出样式。除了上面的 'aligned' 输出样式外,还有紧凑和展开样式的非对齐变体,这些变体在减少文件大小的同时降低了人类的可读性。

FixtureWriter 类将其第一个构造函数参数用作打开文件或流进行写入时使用的类名。可用的选项(在 Eloquent\Fixie\Writer 命名空间中)

SwitchingCompactFixtureWriteHandle

此变体将缓冲约给定数据大小(默认为 10MiB)。如果写入的数据在大小限制内,输出将与 AlignedCompactFixtureWriteHandle 产生的输出相同。如果超出大小限制,此变体将切换到使用 CompactFixtureWriteHandle 的非缓冲输出。

这是Fixie默认使用的变体,因为它在内存使用和人类可读性之间提供了最佳折衷。

AlignCompactFixtureWriteHandle

以'紧凑'风格写入行,并使列标题和行值彼此对齐。这种风格非常适合人类可读性,但对于大数据集来说较差,因为数据必须在内存中缓冲。除非事先知道最大数据大小,否则建议使用切换紧凑FixtureWriteHandle

紧凑FixtureWriteHandle

以'紧凑'风格写入行,使用最少的空白。这种变体对于任何数据大小都非常出色,但与其他选项相比,人类可读性较差。如果不考虑人类可读性,请使用此变体。

AlignExpandedFixtureWriteHandle

以'扩展'风格写入行,并使行值对齐。这是一种多才多艺的变体,产生垂直方向上更加细长的输出。在人类可读性和内存使用方面都很好。

扩展FixtureWriteHandle

以'扩展'风格写入行,但不使行值对齐。只有在数据应类似于典型YAML渲染器输出时才有用。

用法

一些设置

use Eloquent\Fixie\Reader\FixtureReader;
use Eloquent\Fixie\Writer\FixtureWriter;

$writer = new FixtureWriter;
$reader = new FixtureReader;

// some tabular data
$data = array(
    array('foo' => 'bar',  'baz' => 'qux'),
    array('foo' => 'doom', 'baz' => 'splat'),
);

逐行写入

$handle = $writer->openFile('/path/to/file');
foreach ($data as $row) {
    $handle->write($row);
}
$handle->close();

写入整个数据集

$handle = $writer->openFile('/path/to/file');
$handle->writeAll($data);
$handle->close();

逐行读取

$handle = $reader->openFile('/path/to/file');
$data = array();
foreach ($handle as $row) {
    $data[] = $row;
}
$handle->close();

读取整个数据集

$handle = $reader->openFile('/path/to/file');
$data = $handle->readAll();
$handle->close();

手动读取行

$handle = $reader->openFile('/path/to/file');
$row = $handle->read();
if (null !== $row){
    // some custom logic
}
$handle->close();

打开流

$stream = fopen('php://temp', 'wb');
$handle = $writer->openStream($stream);
$stream = fopen('data://text/plain;base64,LSBmb28NCi0gYmFy', 'rb');
$handle = $reader->openStream($stream);

与CSV和YAML的比较

CSV

  • 非常适合机器读取。逐行读取意味着内存使用低。
  • 不支持类型。每个值都是字符串。
  • 人类可读性差,特别是当行值长度不同时。
  • 字符串编码的实现支持不可预测。这使得它不适合多语言数据。

YAML

  • 支持类型。字符串、整数、浮点值、布尔值和null都受支持。
  • 格式正确时非常易于人类阅读。
  • 良好的字符串编码支持。
  • 整个文件必须一次性读取和解析。内存使用量与数据大小成比例。

Fixie

  • 非常适合机器读取。逐行读取意味着内存使用低。
  • 支持类型。字符串、整数、浮点值、布尔值和null都受支持。
  • 格式正确时非常易于人类阅读。
  • 良好的字符串编码支持。