##実現したいこと
記録したデータをcsvファイルにて、出力しようとプログラムを作成しました。
###発生している問題・エラーメッセージ
voidでcsvファイルを作成するように呼び出そうと書いてみたのですが、呼び出すことが出来ません。
![]
###該当のソースコード
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System.IO; using System; using System.Text; public class Manager : MonoBehaviour { public GameObject Text; public GameObject Answer_Text; public GameObject Cover; private Text input_text; private Text answer_text; public static List<string> Input_list; private int count_list; private int old_count_list; public static bool Input_word; private string[] words = {"あ","い","う","え","お", "か","き","く","け","こ", "さ","し","す","せ","そ", "た","ち","つ","て","と", "な","に","ぬ","ね","の", "は","ひ","ふ","へ","ほ", "ま","み","む","め","も", "や","ゆ","よ", "ら","り","る","れ","ろ", "わ","を","ん",}; private List<string> answer; private List<float> answer_time; private int correct_num; private float time; private bool time_Flag; private bool log_Flag; private string start_Up_Time; // Use this for initialization private void Awake() { } void Start () { Input_list = new List<string>(); answer = new List<string>(); answer_time = new List<float>(); count_list = 0; old_count_list = 0; Input_word = false; input_text = Text.GetComponent<Text>(); answer_text = Answer_Text.GetComponent<Text>(); for (int i = 0; i < 20; i++) { int rand = UnityEngine.Random.Range(0, 46); answer.Add(words[rand]); answer_text.text += answer[i]; } Answer_Text.SetActive(false); correct_num = 0; time = 0; time_Flag = false; log_Flag = false; start_Up_Time = DateTime.Now.ToString("MMdd_hhmmss"); } // Update is called once per frame void Update () { if (Input.GetMouseButtonDown(0)) { Answer_Text.SetActive(true); time_Flag = true; Cover.SetActive(false); } if(Input.GetKeyDown(KeyCode.A)) { Write_Log(); } if (Input.GetKeyDown(KeyCode.Escape)) { Application.Quit(); } if (time_Flag == true) { time += Time.deltaTime; } count_list = Input_list.Count; if (count_list != old_count_list) { input_text.text += Input_list[count_list - 1]; if (count_list == 20) { input_text.text += "\n"; } old_count_list = count_list; } if (count_list != 0) { if (answer[correct_num] == Input_list[count_list - 1]) { if (correct_num < 19) { correct_num++; answer_time.Add(time); } else if (correct_num == 19 && log_Flag == false) { time_Flag = false; answer_text.text = time.ToString("N3"); Write_Log(); answer_text.text = "logを吐き出した。"; log_Flag = true; Debug.Log("answer_time_num: " + answer_time.Count.ToString()); Debug.Log("answer_num: " + answer.Count.ToString()); } } } } public void Write_Log() { answer_time.Add(time); string filename = "Play_" + start_Up_Time + ".csv"; StreamWriter sw = new StreamWriter(filename, false, Encoding.GetEncoding(932)); /*FileInfo fi; fi = new FileInfo( "Play_" + start_Up_Time + ".csv"); */ //sw = fi.AppendText(); sw.Write("Correct" + "," + "Answer" + "," + "Time[s]"); sw.WriteLine(); for (int i = 0; i < count_list; i++) { if (i < 20) { sw.Write(answer[i]); } else if (i >= 20) { sw.Write(""); } sw.Write(","); sw.Write(Input_list[i]); sw.Write(","); if (i < 20) { sw.Write(answer_time[i]); } else if (i >= 20) { sw.Write(""); } sw.WriteLine(); } sw.Flush(); sw.Close(); } }
###試したこと
awakeを使うと呼び出しが出来ない、という情報をチラッと見たのでawakeを使わないようにしてみたのですが、うまくできませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
Unity 2017.1.1f1, Visual Studio 2017
「voidでcsvファイルを作成するように呼び出そうと」はどういう意味でしょうか?https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/void
public void Write_Log() で宣言したvoidを、条件が満たされたときに「Write_Log()」で呼び出して処理をするといった意味合いで書きました。
半端な理解での質問で申し訳ありません。
voidは引数の宣言という認識はありますか?「Debug.Log("answer_time_num: "...」の部分は実行されていることは確認できるでしょうか?
すいません、「うまく出力できていません」というのはエラー終了、ファイルが見つからない、ファイルの内容がおかしいなどありますが、どういう状態でしょうか?
はい、認識はありますが勉強不足のようです、勉強し直します。Unityで作業中は確認できますが、ビルドしたもので動かすとWrite_Log()の部分から下は実行されなくなる といった状況です。
うまく出力できていないというのは、ファイルが作成されていない といった意味で使用しました。
試しに、Write_Log()内で、 Debug.Logをして、Write_Log()内の現在の処理をすべてコメントアウトして実行すると実行できますか?
はい、Unity上では実行できています。ファイルも作成されています。
ビルドで実行してみてください
実行してみましたが、ファイルは生成されていませんでした。
Windowsですか?
最初のコードでビルドして、実行した場合、エラーが発生して動かないことはないですか?
※起動して即終了
Windowsです。Development Build でビルドする とエラーを見れるという情報を見つけましたので実行してみたところ"NotSupportedException:CodePage 932 not supported"というエラーが発生していました。
どうやらEncoding.GetEncoding(932) という処理がまずかったようです。
回答2件
あなたの回答
tips
プレビュー