質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.35%

Resources.LoadでCSV読み込んで、書き込みたい。 

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 6,659

fukkun0412

score 37

今UnityでCSVに書き込むプログラムを作成中です。

CSVはResources.Loadを用いて読み込んでいます。
ネットでCSV書き込みのプログラムは出てくるのですが、
参考にしているこのサイト①参考にしているこのサイト②ではUnity上(UnityEditor)では作動するのですが、他のプラットフォームでは動かないのではないかと懸念しています。

Resources.LoadでCSVを読み込んで、プラットフォーム関係なくCSVにデータを書き込むプログラムを教えて頂けないでしょうか?

戻り値・引数はintやstringなどでお願いいたします。詳しい解説・詳しいソースを転記してただければ幸いです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2016/05/30 16:01

    こちらの質問が他のユーザから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 1

checkベストアンサー

+1

他のプラットフォームで動かないと思う根拠は何でしょうか?
Application.datapath を指定すれば保存できると思いますが保存失敗しましたか?
実際に動かなかったのならその時のソースコードを添えて質問されるのがいいと思います。
ちなみに「読み込んだファイルに上書きしたい」というような事ならリソースファイルへの上書きではなく
データファイルが無い時だけリソースから初期ロードし通常はデータフォルダから読んで保存もデータフォルダへという感じに考えてみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/30 16:07

    前にCSVを読み込むプログラムを作成した時に
    public class ReadCSVData : MonoBehaviour {

    public FontManager myFont;

    private string[,] readStrData;

    public string[,] ReadCSV(string path)
    {
    Debug.Log(Application.dataPath);
    using(StreamReader sr = new StreamReader(Application.dataPath + "/" + path, Encoding.GetEncoding("Shift_JIS")))
    {
    //ストリームリーダーをstringに変換
    string strStream = sr.ReadToEnd();
    //StringSplitOptionを設定
    System.StringSplitOptions option = StringSplitOptions.RemoveEmptyEntries;

    //行に分ける
    string[] lines = strStream.Split(new char[] { '\r', '\n' }, option);

    //カンマ分けの準備(区分けする文字を設定する)
    char[] spliter = new char[1] { ',' };

    //行数設定
    int heightLength = lines.Length;
    //列数設定
    int widthLength = lines[0].Split(spliter, option).Length;

    //返り値の2次元配列の要素数を設定
    readStrData = new string[heightLength, widthLength];

    //カンマ分けをしてデータを完全分割
    for (int i = 0; i < heightLength; i++)
    {
    for (int j = 0; j < widthLength; j++)
    {
    //カンマ分け
    string[] StrData = lines[i].Split(spliter, option);
    //配列の要素に入れる
    readStrData[i, j] = StrData[j];
    }
    }
    }

    return readStrData;
    }

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

    }
    }
    上記の様にプログラムにしてデータの場所をApplication.dataPath + "/" + pathとしてやった結果、Unity上では動いたのですが、他のプラットフォーム(WebPlayer・Androidアプリ)では失敗した経験があったからなのです。

    キャンセル

  • 2016/05/30 17:04 編集

    整形されていないので見難いんですが「Application.dataPathから読み込む」作業をするのなら「その前にApplication.dataPathにデータを格納する」作業を自分でしておかねばなりません。その作業をせずにいきなりdataPathからファイルを読み込もうとしてもそこにはそんなファイルは存在していないので読み込みが成功するハズがありません。dataPath+"/"+pathが読めなければResourceからロードする→保存するのならdataPath+"/"+pathに保存する…とすればdataPathには自分が変更して上書きしていくファイルが存在しているので次回からはdataPathからの読み込みが成功して変更後のデータを参照できますよね?(リソースからの読み込みはdetaPathにファイルがない初期状態の時だけ)というか、そもそもdataPathって保存先として使っていい場所でしたっけ?保存するなら Application.persistentDataPath の方だったような記憶がうっすら…?


    ↑dataPath ではなく persistentDataPath か temporaryCachePath と読み替えてください。dataPathは間違いです。

    キャンセル

  • 2016/05/30 17:13

    Application.dataPath = アプリケーションの場所
    Application.persistentDataPath = ユーザデータ等を保存する場所
    Application.temporaryCachePath = 一時的なデータを保存する場所

    なので読み込んだCSVを保存したいのなら persistentDataPath か temporaryCachePath ですね。

    キャンセル

  • 2016/05/30 17:23

    ちなみに「dataPath で読めなかった」原因は dataPath+"/"+path で指定されている場所にファイルが存在していないからというのは間違いはないと思いますので例えば Resources.Load(filename) で読めるのなら dataPath+"/Resources/"+filename とすれば読めたのではないかと推察します。たぶん。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る