ゲームプログラム、swift3.0でCSVファイルを扱うのでSwiftCSVライブラリをゲットしたがエラーでまくり

swift3.0でCSVファイルを扱うのでSwiftCSVライブラリをゲットしたがエラーでまくり

色々エラー

https://github.com/naoty/SwiftCSV
良かったライブラリあるじゃん、楽できるじゃんと思ったが、
でもSwiftのバージョン3.0に上がったためにエラー20件ほど。チクチク直すが、自分で基本的なところだけでも作ったほうが良くないか?と思いはじめて、簡単読み込みを作り直すことにする

他にもあったけど、Swift3.0だと記述が変わってエラー出まくりで対応できず。
バージョンが上がるとかなりしんどくなるので、開発中に、バージョンを上げるのは今後は難しくなる。アップルらしからぬ上位互換無視なので、これからは古い環境も必要となるのでしょう。
No calls to throwing functions occur within ‘try’ expression
init has been renamed

よくわからないが、次のように書き直した。ちなみに、このコードの上にも同じコードがある
let contents = try String(contentsOfURL: url, encoding: encoding)

let contents = try String(describing: (contentsOfURL: url, encoding: encoding))

ただし、書き直しても警告がでてる。

http://qiita.com/mono0926/items/88779ceff30f8fc705c5
より
ndexがsuccessor()・predecessor()・advancedBy(_:)・advancedBy(_:limit:)・distanceTo(_:)でエラーになったときの書き換え

引用
Swift3.0 の
let str = “ABC”
let idx0 = str.startIndex
let idx1 = str.index(after: idx0)
let idx2 = str.index(after: idx1)
str[idx0] // => ‘A’ Character型
str[idx1] // => ‘B’ Character型
str[idx2] // => ‘C’ Character型

Realmを使うとに知っておくと良い情報

Realmファイルが保存されている場所をデバッグプリントしてくれます。

CSVデータをエクセルで作成して、RealmDBに挿入するところをやってみました。

本当は、基本的な部分、いわゆるテーブルを作成して、RealmBrowserでインサートしようとしたのですが、Realmブラウザーがクラッシュしてしまい使えず。
仕方なく、CSVファイルを読みこむコードを書きました。
このCSVファイルの読み込みについてもネット探して、ライブラリを見つけたんですが、Swift2.0で書かれたたみたいで、Siwft3.0でコンパイルしようとするとエラーがてんこもりで諦めて、
ネットの情報を参考にして、RealmDBに登録しました。

参考にしたサイトは

http://hajihaji-lemon.com/smartphone/swift/csv/
こちらはテーブルビューに登録して、出力についても記述ありです。

http://qiita.com/star__hoshi/items/90c9c54301027b01ffa2
Realmの情報です。残念ながら私の環境では動作しませんでしたが、クラスの書き方が参考になります

http://qiita.com/aikawa_Japan/items/ce4a05e78aa23449fa1e
CSV読み込みの部分のみ

この3つを参考にして、引用しています。

ちなみに読み込んだCSVの行数は
304行
3〜4列で、全てが4列揃っていない情報です。

こんな感じです。
1,run,走る,
2,eat,食べる,
3,see,見る,テスト

サンプルコード 以下のコードはCSVを読み込みRealmDBに登録するまでを目的としています。テーブルビューに表示させる内容ではありません。
Realmファイルを初期データとして利用するために作ったコードです。

出力したCSVはドラッグしてプロジェクトに取り込みました。

このDBからまた、配列に取り込む作業を行います。
数百行程度ならたぶんDBは不要なのでしょうけど、検索処理があるなら、DBを使ったほうが扱いやすいと思います。
ただ、SQLとかあまり使わない人であれば、プログラムのコードを書いたほうが楽かもしれません。
RealmはDBといっても、SQLのSELECT文みたいな感じではないので、とっつきにくい感じがします。

CSV読み込み、サンプルコード

CSVファイル例

RealmDBのテーブルオブジェクトの構成

サンプルコード

以下のコードは単に、Realmを使うだけで、ViewやSceneには表示させていません。Realmファイルを生成するのが目的です。

CSVファイルから読み込んでRealmDBに登録したtestRealm2プロジェクトのGameSceneのコード

testRealm3のGameSceneのコード
pokemon2.realmからテスト的に読み込みをして、成績管理用のSeiseki.realmを作成するコード
testRealm2のプロジェクトとわざわざ分けて作成する必要はないのですが、あとでコードを確認するときに、分けておいたほうがコードを実行しやすいのと、見やすいと思ったから。

RealmDBクラス
プライマリーキーはetangoカラムです。SQLでいうところのテーブルを作成するところです。

成績管理用クラス
プライマリーキーはetangoカラムです。

全体作業の手順の説明

(1)事前準備Realmライブラリをプロジェクトに登録する。

英単語データ作成
英単語と意味と語呂合わせなどのデータをエクセルdw作成

csv出力
csvファイルをXcodeプロジェクトに読み込み、ドラッグアンドドロップ

Swiftにてcsv読み込みとRealmDBオブジェクト作成インサートしてRealmファイルを作成
ここまで読み込み用プロジェクトとした。これは後で参考にする時に全部一緒だと実行して確認するのに手間だから。
(2)
別のプロジェクトを作成してRealmライブラリを登録
プロジェクトにRealmファイルをドラッグアンドドロップする。

Realmファイルから配列に登録

配列から問題出題

正誤を成績テーブルオブジェクトに登録

ここまで見るとなんとも面倒な作業をしています。最初からcsvを配列に入れて、使えば良いわけで、わざわざRealmDBやRealmファイルを使う必要はなさそうです。
そうなんですが、最終的に登録数や検索内容が多くなるとDBを使う方が便利になりそうなので勉強も兼ねて、RealmDBを使用しています。今は300行程度ですが目標が3000語です。
3000語ともなるとエクセルで扱うにも面倒な数です。量が増えても良いように今のうちに設計しておこうと思います。

こちらの記事もどうぞ