読者です 読者をやめる 読者になる 読者になる

ビギグラマーのノート

自作PCやプログラミングについてのブログです。

CSVファイルの読み込みと変換

iPhoneアプリを作る

環境 Swift 3.0.2 xCode 8.2.1

今回やることは

  1. Documents内のファイルのパスを作成
  2. そのパスからファイルの存在を確認
  3. String型でCVSファイルを取得
  4. indexで各文字をCharacter型で取得
  5. カンマやダブルクォートなら仕様通りに前後を確認し編集

indexで文字を検索するのは多機能ですが行を使うので簡単な関数を作っておきます。

 

多次元配列の初期化で var array1 : String = ; array1.append(Array<String>()); を使っていますが、以前のバージョンで実行結果が[,["A","B"],["C","D"]]のように思うような形にならなかったりしました。なので今回はうまくいきましたが将来的にはどうなるかわかりません。

今回はindexで文字を一個一個取り出してStringの変数に加えていく形にしましたが、レンジ演算子で範囲指定でうまくやればもっとスマートにできそうです。

 今回はCVSの仕様の一つであるダブルクォートでセルを囲むタイプを読み込みましたが、この他にもダブルクォートで囲まないものや、マイナーですがTabで囲むものなどがありこれらに対応するものも作らなければいけません。switch部分に機能を足していけば結構簡単に実現できそうです。

毎回case 「ダブルクォート」の際に2つ後の文字まで確認するため最後でindex外の数値を指定し Error : The index is too big を吐いていますが、予想通りなので問題ありません。最後のダブルクォートでその定数を作るのを止めればいいのですが、あらかた書き終わった時点で気がついたので直す気力がなくなりました。wordIndex関数で範囲外のは弾いているのでまあ良しとしましょう。

*追記*

 このCSVファイル読み込み関数を使用する場合、読み込ませるCSVファイルは

  • 文字コードUNICODE
  • セルをダブルクォートで囲む
  • セル内でダブルクォートを使用する場合二重につける ""
  • ヘッダはつけない

を前提にしてファイルを作成してください。