-
Notifications
You must be signed in to change notification settings - Fork 0
/
Form1.cs
162 lines (147 loc) · 5.18 KB
/
Form1.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Microsoft.VisualBasic.FileIO;
using Newtonsoft.Json.Linq;
namespace tba2csv
{
public partial class Form1 : Form
{
protected List<string> columnList;
public Form1()
{
InitializeComponent();
}
const string tbaheader = "frc5818:tba2csv:1.00";
const string tbawebsite = "https://www.thebluealliance.com";
Match match = new Match();
protected string TBA_RequestJson(string request)
{
WebClient wc = new WebClient();
wc.Headers.Add("X-TBA-App-Id", tbaheader);
string url = tbawebsite + request;
string downloadedData = null;
try
{
downloadedData = wc.DownloadString(url);
}
catch (Exception ex)
{
Debug.WriteLine("EXCEPTION: " + url + ":" + ex.ToString());
}
return downloadedData;
}
private void Form1_Load(object sender, EventArgs e)
{
string eventtcode = "2017casd";
string team = "frc5818";
string reqevent = "/api/v2/event/" + eventtcode + "/matches";
string reqteam = "/api/v2/team/" + team + "/event/" + eventtcode + "/matches";
comboURL.Items.Add(reqevent);
comboURL.Items.Add(reqteam);
comboURL.Text = reqevent;
int cols = match.headers.Length;
dgvValues.Columns.Clear();
for (int col = 0; col < cols; ++col)
{
string label = match.headers[col];
dgvValues.Columns.Add(label, label);
}
}
// Read the JSON data from the server.
private void btnLoad_Click(object sender, EventArgs e)
{
string jsonString = TBA_RequestJson(comboURL.Text);
if (jsonString != null)
{
dgvValues.Rows.Clear();
columnList = new List<string>();
Match[] matches;
int rows = match.ParseJson(jsonString, out matches);
int cols = match.headers.Length;
for (int row = 0; row < rows; ++row)
{
string[] values;
dgvValues.Rows.Add();
if (matches[row].blue != null)
{
values = matches[row].blue.ToStrings();
for (int col = 0; col < cols; ++col)
{
dgvValues.Rows[row * 2].Cells[col].Value = values[col];
}
}
dgvValues.Rows.Add();
if (matches[row].red != null)
{
values = matches[row].red.ToStrings();
for (int col = 0; col < cols; ++col)
{
dgvValues.Rows[row * 2 + 1].Cells[col].Value = values[col];
}
}
}
}
}
private void btnSave_Click(object sender, EventArgs e)
{
string pathname = txtFile.Text;
if (pathname.Length == 0)
{
FileDialog dlg = new SaveFileDialog();
dlg.AddExtension = true;
dlg.DefaultExt = ".csv";
dlg.Filter = "Comma Separated Values|*.csv|Text Files|*.txt|All Files|*.*";
DialogResult result = dlg.ShowDialog();
if (result != DialogResult.OK)
return;
pathname = dlg.FileName;
txtFile.Text = pathname;
}
int rows = dgvValues.Rows.Count;
int cols = dgvValues.Columns.Count;
StreamWriter file = new StreamWriter(pathname);
string header = "";
for (int c = 0; c < cols; ++c)
{
if (c != 0)
header += ',';
header += dgvValues.Columns[c].Name;
}
file.WriteLine(header);
for (int r = 0; r < rows; ++r)
{
try
{
string line = "";
for (int c = 0; c < cols; ++c)
{
String str = dgvValues.Rows[r].Cells[c].Value.ToString();
// Escape dquotes in str
str = str.Replace("\"", "\"\"");
// Quote if str contains a comma
if (str.Contains(","))
str = '"' + str + '"';
if (c != 0)
line += ',' + str;
else
line = str;
}
file.WriteLine(line);
}
catch (Exception ex)
{
}
}
file.Close();
}
}
}