1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Siv3DAdvent Calendar 2023

Day 15

OpenSiv3D for ゲーム以外のいろいろ!(ファイル操作編)

Last updated at Posted at 2023-12-14

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ファイルの読み書きをしてみましょう。

fruits.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");
}

結果は次のようになります。

sorted_fruits.csv
fruit, price
srawberry, 200
apple, 100
banana, 80
orange, 70

こんな簡単にデータが扱えます。
似たような感じでJSONファイルやINIファイルも扱えるので公式のリファレンスをぜひともチェックしてみてください。

公式リファレンス:

ちなみにこれをSiv3Dを使わずに書くとifstreamでファイル読み込んで、自分でCSVファイルをパースして、oftream書き出してという手順となります。圧倒的に楽になっていることがこれで伝わるでしょうか?

バイナリファイル

こちらも便利に扱えるようにはなっています。今回こちらでは紹介しませんが、こちらもぜひ活用してみてください!
大体リファレンスに書いてあります。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?