using System; using System.IO; using System.Collections.Generic; using System.Text; using UnityEngine; using UnityEngine.UI; [RequireComponent(typeof(CastingToObject))] public class MarketStallSelection : MonoBehaviour { // Inspector variables public string logFileName = ""; // Get from LoggingManager private int ParticipantID; private string logPathFolder = ""; // Changes on click private bool sendSelection = false; private List[][] selectedMarketStall; private List[][] selectedMarketStallTime; private string[] marketStallNames; private string logPath; private float time = 0f; private float saveTime = 0f; private string[] buffer; private int index = 0; private void Start() { ParticipantID = gameObject.GetComponentInParent().ParticipantID; logPathFolder = gameObject.GetComponentInParent().LogPathFolder; logFileName = "log_" + ParticipantID + "_" + logFileName + ".csv"; logPath = Path.Combine(logPathFolder, logFileName); using (FileStream stream = File.Open(logPath, FileMode.Create)) { using (StreamWriter writer = new StreamWriter(stream)) { writer.WriteLine(GetLogFileHeader()); writer.Flush(); } } Debug.Log("Created new Logfile " + logFileName); buffer = new string[1000]; } private string GetLogFileHeader() { StringBuilder header = new StringBuilder("ParticipantID"); header.Append(";Time Submit clicked"); header.Append(";Market Stalls"); header.Append(";Most Visited Market Stall"); header.Append(";Low Waiting Time Market Stall"); header.Append(";High Waiting Time Market Stall"); header.Append(";Selection Time Most Visited "); header.Append(";Selection Time Low Waiting Time"); header.Append(";Selection Time High Waiting Time"); return header.ToString(); } public void OnSubmitClicked() { sendSelection = true; selectedMarketStall = CastingToObject.selectedMarketStalls; selectedMarketStallTime = CastingToObject.selectedMarketStallsTimes; marketStallNames = CastingToObject.marketStallNames; saveTime = time; time = 0f; } private void FixedUpdate() { if (sendSelection) { for (int i = 0; i < selectedMarketStall.Length; i++) { StringBuilder line = new StringBuilder(); line.Append(ParticipantID); line.Append(";" + saveTime); line.Append(";" + marketStallNames[i]); line.Append(";" + string.Join("|", selectedMarketStall[i][0])); line.Append(";" + string.Join("|", selectedMarketStall[i][1])); line.Append(";" + string.Join("|", selectedMarketStall[i][2])); line.Append(";" + string.Join("|", selectedMarketStallTime[i][0])); line.Append(";" + string.Join("|", selectedMarketStallTime[i][1])); line.Append(";" + string.Join("|", selectedMarketStallTime[i][2])); buffer[index++] = line.ToString(); if (index > buffer.Length - 1) writeFromBuffer(); } Debug.Log("Submission successful!"); sendSelection = false; } time += Time.deltaTime; } private void writeFromBuffer() { if (File.Exists(logPath)) { try { using (StreamWriter writer = new StreamWriter(logPath, true)) { for (int i = 0; i < buffer.Length; i++) { if (buffer[i] != null) { writer.WriteLine(buffer[i]); writer.Flush(); } } buffer = new string[1000]; index = 0; } } catch (Exception e) { throw new ApplicationException("Something went wrong by writing into a csv file: ", e); } } } private void OnApplicationQuit() { writeFromBuffer(); } }