Newer
Older
PrismSoftware / EcomAnalysis / Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;

namespace EcomAnalysis {
    public partial class Form1 : Form {

        private string[] _HeaderItems = {
            "stimNo", "sceneNo", "stimTime", "contact time", "Feedback", "RR" };
        private Dictionary<int, int> _SceneNoAssign = new Dictionary<int, int>();
        private List<LogData> _Data = new List<LogData>();

        public Form1() {
            InitializeComponent();
            for (int scene = 1, stim = 5; scene <= 10; scene++, stim += 2) {
                _SceneNoAssign.Add(stim, scene);
            }
            for (int scene = 11, stim = 26; scene <= 20; scene++, stim += 2) {
                _SceneNoAssign.Add(stim, scene);
            }
            for (int scene = 21, stim = 47; scene <= 30; scene++, stim += 2) {
                _SceneNoAssign.Add(stim, scene);
            }
            for (int scene = 31, stim = 68; scene <= 40; scene++, stim += 2) {
                _SceneNoAssign.Add(stim, scene);
            }
        }

        private void Form1_Load(object sender, EventArgs e) {
            textBox1.Text = "not opened";
            var args = Environment.GetCommandLineArgs();
            if (args.Length > 1) {
                ReadCSV(args[1]);
                Analyze();
            }
        }

        private void Analyze() {
            var fbCounts = new int[5];
            var fbPts = new int[5];
            for (int i=0; i<fbCounts.Length; i++) {
                fbCounts[i] = _Data.Where(s => s.Feedback == i + 1).Count();
                fbPts[i] = fbCounts[i] * (i + 1);
            }
            TxtFB1.Text = fbCounts[0].ToString("0回") +
                fbPts[0].ToString("  0ポイント");
            TxtFB2.Text = fbCounts[1].ToString("0回") +
                fbPts[1].ToString("  0ポイント");
            TxtFB3.Text = fbCounts[2].ToString("0回") +
                fbPts[2].ToString("  0ポイント");
            TxtFB4.Text = fbCounts[3].ToString("0回") +
                fbPts[3].ToString("  0ポイント");
            TxtFB5.Text = fbCounts[4].ToString("0回") +
                fbPts[4].ToString("  0ポイント");
            TxtFBTotal.Text = fbCounts.Sum().ToString("0回") +
                fbPts.Sum().ToString("  0ポイント");
        }

        private void ReadCSV(string csvfile) {

            char[] sep = { ',' };
            if (!File.Exists(csvfile)) {
                MessageBox.Show("ファイルがありません", "Error",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            using (var sr = new StreamReader(csvfile,
                Encoding.GetEncoding("shift_jis"))) {

                var readHeader = sr.ReadLine().Split(sep);
                var headerCol = new Dictionary<string, int>();
                foreach (var hi in _HeaderItems) {
                    headerCol.Add(hi, readHeader.ToList().IndexOf(hi));
                }
                if (headerCol.Count < _HeaderItems.Length-1) {
                    MessageBox.Show("必要な列がありません", "Error", 
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                _Data.Clear();
                var sceneNoExist = headerCol["sceneNo"] >= 0;
                while (sr.Peek() > -1) {
                    var line = sr.ReadLine().Split(sep);
                    var ld = new LogData();
                    ld.StimNo = int.Parse(line[headerCol["stimNo"]]);
                    ld.SceneTime = double.Parse(line[headerCol["stimTime"]]);
                    ld.ContactTime = double.Parse(line[headerCol["contact time"]]);
                    ld.Feedback = int.Parse(line[headerCol["Feedback"]]);
                    ld.RR = int.Parse(line[headerCol["RR"]]);
                    ld.SceneNo = sceneNoExist ? int.Parse(line[headerCol["sceneNo"]]) 
                        : (_SceneNoAssign.ContainsKey(ld.StimNo) ? _SceneNoAssign[ld.StimNo] : 0);
                    _Data.Add(ld);
                }
                //Debug.WriteLine(_Data.Count);
                textBox1.Text = csvfile;
                var filename = Path.GetFileNameWithoutExtension(csvfile);
                TxtDateTime.Text = string.Format("{0}年{1}月{2}日 {3}時{4}分",
                    filename.Substring(0,4), filename.Substring(4, 2),
                    filename.Substring(6, 2), filename.Substring(9, 2),
                     filename.Substring(11, 2));
            }
        }
    }
}