nlib
nn::nlib::msgpack::CsvReader クラスfinal

CSVパーサーです。ストリームからCSV文字列を読み込んでパースします。 [詳解]

#include "nn/nlib/msgpack/CsvReader.h"

公開メンバ関数

bool Read (MpObject *obj) noexcept
 CSV文字列をストリームから読み込んでパースし、obj に設定します。 [詳解]
 
InputStreamGetStream () noexcept
 Init()で設定したベースストリームを取得します。 [詳解]
 
基本的なメンバ関数
 CsvReader () noexcept
 デフォルトコンストラクタです。
 
 ~CsvReader () noexcept
 デストラクタです。
 
初期化と終了
errno_t Init () noexcept
 CsvReaderを初期化します。 [詳解]
 
errno_t Open (InputStream *stream) noexcept
 入力ストリームをセットします。 [詳解]
 
bool Close () noexcept
 CsvReader をクローズします。 [詳解]
 
エラーチェック
errno_t GetErrorValue () const noexcept
 発生したエラーを取得します。 [詳解]
 
 operator bool () const
 エラーが発生していなければtrueを返します。
 

静的公開メンバ関数

static bool Read (MpObject *obj, const char *csvtext) noexcept
 CSV文字列をパースしてオブジェクトを設定します。 [詳解]
 

詳解

CSVパーサーです。ストリームからCSV文字列を読み込んでパースします。

説明
基本的にはRFC4180に準拠しています。
ただし以下の点が異なります。
  • 改行コードはCRLFのみでなく、CR, LF単体でも改行コードと認識されます。
  • UTF-8文字列を通します。UTF-8の文字列はUTF-8として正しいかどうかチェックされます。
読み込んだデータはMpObjectに変換されます。データは配列の配列という形式となり、列の長さは最長のものに揃えられます。 また、パースの際にフィールドの文字列が型変換される場合があります。
具体的には、以下のとおりです。
  • 整数と浮動小数点数は数値に変換されます。16進表現等は文字列と解釈されます。
  • true, falseは真偽値の値に変換されます。
  • 空文字列はnilに変換されます。
参照
https://www.ietf.org/rfc/rfc4180.txt (RFC4180, CSV)
http://www.kasai.fm/wiki/rfc4180jp (RFC4180, CSV, in Japanese)

CsvReader.h17 行目に定義があります。

関数詳解

§ Close()

nn::nlib::msgpack::CsvReader::Close ( )
noexcept

CsvReader をクローズします。

戻り値
成功した場合はtrue
説明
CsvReaderをクローズして、ベースストリームをデタッチします。 この際、ベースストリームはクローズされません。
Init()メンバ関数を再び利用することでオブジェクトを再利用することができます。

§ GetErrorValue()

nn::nlib::msgpack::CsvReader::GetErrorValue ( ) const
inlinenoexcept

発生したエラーを取得します。

戻り値
0エラーは発生していません。
EILSEQCSVとしては正しくない文字に遭遇した(パースエラー)。
EINVAL引数にエラーがあった。
EEXIST初期化されたCsvReaderを再度初期化しようとした。
EIOベースストリームでエラーが発生した。
EBADF未初期化のCsvReaderを利用しようとした。
ENOMEMメモリの取得に失敗した。

CsvReader.h28 行目に定義があります。

§ GetStream()

nn::nlib::msgpack::CsvReader::GetStream ( )
noexcept

Init()で設定したベースストリームを取得します。

戻り値
ストリームへのポインタを返します。

§ Init()

nn::nlib::msgpack::CsvReader::Init ( )
noexcept

CsvReaderを初期化します。

戻り値
成功した場合は0

§ Open()

nn::nlib::msgpack::CsvReader::Open ( InputStream stream)
noexcept

入力ストリームをセットします。

引数
[in]stream入力ストリームへのポインタ
戻り値
成功した場合は0

§ Read() [1/2]

nn::nlib::msgpack::CsvReader::Read ( MpObject obj,
const char *  csvtext 
)
staticnoexcept

CSV文字列をパースしてオブジェクトを設定します。

引数
[in]obj変換されたCSVが格納されるオブジェクト
[in]csvtextCSV文字列
戻り値
成功ならばtrue
説明
内部でCsvReaderを構築し、メモリストリームからCSV文字列を読み込みパースします。 途中で何らかのエラーがあった場合はfalseを返します。その場合はobj は不変です。

§ Read() [2/2]

nn::nlib::msgpack::CsvReader::Read ( MpObject obj)
noexcept

CSV文字列をストリームから読み込んでパースし、obj に設定します。

引数
[in]obj読み込んだCSVが設定されるオブジェクト
戻り値
成功した場合はtrue
説明
CSV文字列はMpObjectに変換されて、obj に格納されます。 読み込み中にエラーが発生した場合、エラーを設定してfalseを返します。

このクラス詳解は次のファイルから抽出されました: