Siv3Dをもっと身近に!?
最近、ゲームやアプリ開発のためのオープンソースフレームワークとして名をはせているOpenSiv3Dですが、このフレームワークに含まれている機能で非常に便利なものがいくつもあるのでその中からファイル操作関連の機能をピックアップしました!
ゲームに関する機能やコードの紹介はしないので、そちらを探している方は、私以外の方々の素晴らしい記事をご覧ください
ファイル操作
テキストファイル
C++のファイル操作がわからない人はいませんか?
それならSiv3Dを使ってやってみましょう!
#include <Siv3D.hpp>
void Main()
{
TextReader tr {U"example/txt/en.txt"};
if (not tr)
{
throw Error {U"en.txtを開くことに失敗しました"};
}
const String txt = tr.readAll();
TextWriter tw {U"example/txt/w_en.txt"};
if (not tw)
{
throw Error {U"w_en.txtを作ることに失敗しました"};
}
tw << txt << U"こうやって追加できる";
}
このようにしてファイルを操作することができます。直感的に書くことができるのは非常にありがたいことですね。
設定ファイル
個人的に最もありがたい機能の一つです。
C++でCSVファイルやJSONファイル、INIファイルを読み書きしたり、tomlファイルやXMLファイルを読み出したいことあります。
例として次のようなCSVファイルの読み書きをしてみましょう。
fruit, price
apple, 100
orange, 70
strawberry, 200
banana, 80
ではこれを値段が安い順に並べ替えてみましょう。
Siv3Dを使うと次のように書けます。
#include <tuple> // いらないかもしれない
#include <algorithm> // いらないかもしれない
#include <Siv3D.hpp>
void Main()
{
// CSVファイルを開く
const CSV scv_reader {U"fruits.csv"};
if (not csv_reader)
{
throw Error {U"fruits.csvを開けませんでした"};
}
// CSVファイルの中身の取り出し
Array<std::pair<int, String>> fruits;
for(size_t i = 1; i < csv_reader.size(); i++)
{
fruits[i].second = csv_reader[i][0];
fruits[i].first = Parse<int>(csv_reader[i][1]);
}
// ソート
std::sort(fruits.begin(), fruits.end());
// CSVファイルの書き込み
CSV csv_writer;
csv_writer.writeRow(U"fruit". U"price");
for(const auto& fruit : fruits)
{
csv_writer.writeRow(fruit.second, fruit.first);
}
csv_writer.save(U"sorted_fruits.csv");
}
結果は次のようになります。
fruit, price
srawberry, 200
apple, 100
banana, 80
orange, 70
こんな簡単にデータが扱えます。
似たような感じでJSONファイルやINIファイルも扱えるので公式のリファレンスをぜひともチェックしてみてください。
公式リファレンス:
ちなみにこれをSiv3Dを使わずに書くと
ifstream
でファイル読み込んで、自分でCSVファイルをパースして、oftream
書き出してという手順となります。圧倒的に楽になっていることがこれで伝わるでしょうか?
バイナリファイル
こちらも便利に扱えるようにはなっています。今回こちらでは紹介しませんが、こちらもぜひ活用してみてください!
大体リファレンスに書いてあります。