TOML di tahun 99; sesuai dengan v1.0.
Jika Anda mencari perpustakaan C++, Anda dapat mencoba pembungkus ini: https://github.com/cktan/tomlcpp.
Silakan lihat file toml.h
untuk detailnya. Berikut ini adalah contoh sederhana yang mem-parsing file konfigurasi ini:
[ server ]
host = " www.example.com "
port = [ 8080 , 8181 , 8282 ]
Ini adalah langkah-langkah biasa untuk mendapatkan nilai dari file:
Di bawah ini adalah contoh penguraian nilai dari tabel contoh.
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include "toml.h"
static void error ( const char * msg , const char * msg1 )
{
fprintf ( stderr , "ERROR: %s%sn" , msg , msg1 ? msg1 : "" );
exit ( 1 );
}
int main ()
{
FILE * fp ;
char errbuf [ 200 ];
// 1. Read and parse toml file
fp = fopen ( "sample.toml" , "r" );
if (! fp ) {
error ( "cannot open sample.toml - " , strerror ( errno ));
}
toml_table_t * conf = toml_parse_file ( fp , errbuf , sizeof ( errbuf ));
fclose ( fp );
if (! conf ) {
error ( "cannot parse - " , errbuf );
}
// 2. Traverse to a table.
toml_table_t * server = toml_table_in ( conf , "server" );
if (! server ) {
error ( "missing [server]" , "" );
}
// 3. Extract values
toml_datum_t host = toml_string_in ( server , "host" );
if (! host . ok ) {
error ( "cannot read server.host" , "" );
}
toml_array_t * portarray = toml_array_in ( server , "port" );
if (! portarray ) {
error ( "cannot read server.port" , "" );
}
printf ( "host: %sn" , host . u . s );
printf ( "port: " );
for ( int i = 0 ; ; i ++ ) {
toml_datum_t port = toml_int_at ( portarray , i );
if (! port . ok ) break ;
printf ( "%d " , ( int ) port . u . i );
}
printf ( "n" );
// 4. Free memory
free ( host . u . s );
toml_free ( conf );
return 0 ;
}
Tabel TOML adalah kamus tempat pencarian dilakukan menggunakan kunci string. Secara umum, semua fungsi akses pada tabel diberi nama toml_*_in(...)
.
Dalam kasus normal, Anda mengetahui kunci dan tipe kontennya, dan pengambilan dapat dilakukan menggunakan salah satu fungsi berikut:
toml_string_in ( tab , key );
toml_bool_in ( tab , key );
toml_int_in ( tab , key );
toml_double_in ( tab , key );
toml_timestamp_in ( tab , key );
toml_table_in ( tab , key );
toml_array_in ( tab , key );
Anda juga dapat menginterogasi kunci dalam tabel menggunakan indeks bilangan bulat:
toml_table_t * tab = toml_parse_file (...);
for ( int i = 0 ; ; i ++ ) {
const char * key = toml_key_in ( tab , i );
if (! key ) break ;
printf ( "key %d: %sn" , i , key );
}
Array TOML dapat di-deref-ed menggunakan indeks integer. Secara umum, semua metode akses pada array diberi nama toml_*_at()
.
Untuk mendapatkan ukuran array:
int size = toml_array_nelem ( arr );
Untuk mendapatkan konten array, gunakan indeks yang valid dan panggil salah satu fungsi berikut:
toml_string_at ( arr , idx );
toml_bool_at ( arr , idx );
toml_int_at ( arr , idx );
toml_double_at ( arr , idx );
toml_timestamp_at ( arr , idx );
toml_table_at ( arr , idx );
toml_array_at ( arr , idx );
Beberapa fungsi toml_*_at
dan toml_*_in
mengembalikan struktur toml_datum_t. Bendera ok
di struktur menunjukkan apakah pemanggilan fungsi berhasil. Jika ya, Anda dapat melanjutkan membaca nilai yang sesuai dengan jenis konten.
Misalnya:
toml_datum_t host = toml_string_in(tab, "host");
if (host.ok) {
printf("host: %sn", host.u.s);
free(host.u.s); /* FREE applies to string and timestamp types only */
}
** PENTING: jika nilai yang diakses adalah string atau stempel waktu, Anda harus memanggil free(datum.us)
atau free(datum.u.ts)
masing-masing setelah penggunaan. **
Uang normal saja sudah cukup. Anda juga dapat memasukkan file toml.c
dan toml.h
ke dalam proyek Anda.
Memanggil make install
akan menginstal file header dan perpustakaan ke /usr/local/{include,lib}.
Alternatifnya, tentukan make install prefix=/a/file/path
untuk menginstal ke /a/file/path/{include,lib}.
Untuk menguji terhadap set pengujian standar yang disediakan oleh toml-lang/toml-test:
% make
% cd test1
% bash build.sh # do this once
% bash run.sh # this will run the test suite
Untuk menguji terhadap set pengujian standar yang disediakan oleh iarna/toml:
% make
% cd test2
% bash build.sh # do this once
% bash run.sh # this will run the test suite