【Swift】CSVファイルを使ってデータの入出力を行う。【Swift】CSVファイルを使ってデータの入出力を行う。2020年6月16日CSVファイルとは本記事ではCSVファイルを用いてデータを入出力する方法について説明する。Valuesの略で、データをカンマ区切りで並べたファイルのことをいう。アプリで利用する可変データをCSVファイルで用意し、アプリ起動時に読み込んだり、次回起動時のために出力したりして利用する。Dataでも同じことができるが、CSVファイルのほうが手軽に編集できる。他のアプリにデータを渡すときもCSVファイル1つを渡すだけでいいので取り扱いが楽だ。以下のコードのように、アプリで利用するデータをソースコードに直接定義した場合、データ変更時にソースコードを編集する必要があるのと、アプリ使用中にデータを変更して保存することができない。いって、データベースを利用するほどのデータでもない。そんなときに利用できるのがCSVファイルである。"テニス部"]]CSVファイルを読み込む実際にCSVファイルを読み込んで使ってみよう。以降の手順を行う前のXcodeプロジェクトをGitHubに置いたので、試してみる人はご利用下さい。⇒「テスト用プロジェクト」ソースコードに記述された部活データをテーブルビューに表示するものを実装しておいた。この部活データをCSVファイルから読み込むように変更する。//セルのラベルに部名、部室を設定する。{//セルを取得する。UITableViewCell//セルのラベルに部名、部室を設定する。dataList.count}}メニューから「File」⇒「New」⇒「File...」を選択する。テンプレートを選択する画面が表示されるので、「iOS」⇒「Other」⇒「Empty」を選択し、「Next」ボタンを押す。Asに「sample.csv」、Whereにプロジェクトフォルダを設定して「Create」ボタンを押す。追加されたCSVファイル(下図赤枠)を選択し、黄緑枠の編集欄にCSVのデータを入力する。以下は入力するデータ1,3A,野球部2,2B,サッカー部3,6C,テニス部ViewController.swiftを以下のコードに変更する。ViewDidLoadメソッドでCSVファイルのデータを読み込み、改行区切りで部活配列に格納している。デリゲートメソッドの「データを返すメソッド」が呼び出されたら、部活配列から抽出したデータをカンマ区切りで分割し、ラベルに設定している。//CSVファイルのパスを取得する。//CSVファイルのデータを取得する。//改行区切りでデータを分割して配列に格納する。//カンマでデータを分割して配列に格納する。//セルのラベルに部名、部室を設定する。{//CSVファイルのパスを取得する。"csv")//CSVファイルのデータを取得する。encoding:NSUTF8StringEncoding)//改行区切りでデータを分割して配列に格納する。{//セルを取得する。UITableViewCell//カンマでデータを分割して配列に格納する。dataList[indexPath.row].componentsSeparatedByString(",")//セルのラベルに部名、部室を設定する。dataList.count}}以下は実際のプレイ動画。ソースコードに直接書いていたデータをCSVファイルから読み込むようにしただけなので、外見上の動きは変更前と変わらない。https://hajihaji-lemon.com/apli/wp-content/uploads/2016/08/csv_normal_movie.mp4CSVファイルを出力する次回起動時の読み込みデータを変更するために、アプリ内からCSVファイルを更新したいことがある。テーブルビューに表示されている部活を削除したときに、CSVデータが更新されるものを実装してみよう。ユーザーデータを保存するDocumentsフォルダにCSVファイルを保存する。アプリ起動時にDocumentsフォルダにsample.csvが存在するかを確認し、存在する場合はそのデータを読み込み、存在しない場合はプロジェクトに最初から格納されているsample.csvを読み込むようにする。ViewController.swiftを以下のコードに変更する。テーブルビューからデータを削除すると同時にDocumentsフォルダにsample.csvを出力している。部活をすべて削除した場合はDocumentsフォルダのsample.csvを削除する。//ユーザーが保存したCSVファイルが無い場合は、初期CSVファイルから読み込む。//CSVファイルのデータを取得する。//改行区切りでデータを分割して配列に格納する。//テーブルビューを編集モードにする。//CSVファイルの出力先を確認する。//カンマでデータを分割して配列に格納する。//セルのラベルに部名、部室を設定する。//削除の場合、配列からデータを削除する。//CSVファイルにデータを保存する。//改行区切りで部活配列を連結する。//部活配列が空の場合はユーザーが保存したCSVファイルを削除する。//ファイルを出力する。false){//ユーザーが保存したCSVファイルが無い場合は、初期CSVファイルから読み込む。"csv")!}//CSVファイルのデータを取得する。encoding:NSUTF8StringEncoding)//改行区切りでデータを分割して配列に格納する。csvData.componentsSeparatedByString("\n")//テーブルビューを編集モードにする。true//CSVファイルの出力先を確認する。{//セルを取得する。UITableViewCell//カンマでデータを分割して配列に格納する。dataList[indexPath.row].componentsSeparatedByString(",")//セルのラベルに部名、部室を設定する。{//削除の場合、配列からデータを削除する。{dataList.removeAtIndex(indexPath.row)}//テーブルの再読み込みtableView.reloadData()//CSVファイルにデータを保存する。{//改行区切りで部活配列を連結する。{//部活配列が空の場合はユーザーが保存したCSVファイルを削除する。{//ファイルを出力する。【Swift】NSUserDefaultsの使い方。アプリの設定情報を保存する。...【Swift】CLLocationManagerの使い方。Viewを使って、秒も設定できるカウントダウンタイマーを作る。...【Swift】UIViewの使い方。部品はみんなこのクラスを継承している。PM最新版のxcodeでこの記事の通り、やらせていただきました。NSExceptionというエラーが出て、うまくいきませんでした。PM状況がいま一つ分からないので正確な答えはできませんが、このエラーはストーリーボードの編集に問題があったときによく見かけたエラーです。コネクションインスペクタを開いて部品とソースコードの紐づけがダブっていないか確認してみて下さい。PM管理人さん、ありがとうございます!ストーリーボードを編集したら、そのエラーがなくなりました。自分でも調べるように頑張りますので、どうしても質問させていただきたいことができたら、よろしくお願いいたします。PMどういたしましてエラーが解消して良かったですね^^ソースコードを詳細に調べる時間はないですが、私の分かる範囲であれば回答します。コメントをキャンセルメールアドレスが公開されることはありません。