回答編集履歴

2

見直しキャンペーン中

2023/07/29 13:08

投稿

TN8001
TN8001

スコア9862

test CHANGED
@@ -1,337 +1,169 @@
1
1
  参考の質問は複数のcsvを読む作りですが、一度に複数読みたいのでしょうか?
2
2
 
3
-
4
-
5
3
  とりあえず1ファイルの読み込みで作りました。
6
-
7
4
  ファイル全部読むのに`StreamReader`は冗長なだけなので、もっと簡単な方法を使います。
8
5
 
9
-
10
-
11
6
  `Form1`には`button1`・`button2`・`label1`があるとします。
12
-
13
7
  それぞれのボタンにはクリックイベントを付けます。
14
-
15
-
16
8
 
17
9
  csvの例がないので適当にでっち上げましたが、配列のインデックス等は調整してください。
18
10
 
19
-
20
-
21
11
  注意)エラー処理が一切ありません。
22
-
23
12
  ヘッダー以外にintにならない文字や途中の空行・データが足らない等があると、当然落ちます^^;
24
13
 
25
-
26
-
27
- ```C#
14
+ ```cs
28
-
29
15
  using System;
30
-
31
16
  using System.Collections.Generic;
32
-
33
17
  using System.Data;
34
-
35
18
  using System.IO;
36
-
37
19
  using System.Linq;
38
-
39
20
  using System.Windows.Forms;
40
21
 
22
+ namespace Questions374940
23
+ {
24
+ public partial class Form1 : Form
25
+ {
26
+ // 「別クラスからどうのこうの」ということがなければ、別にstaticにすることもない
27
+ // フィールド(メンバ変数)は、button1_Clickからもbutton2_Clickからもアクセスできます
28
+ private List<int[]> csvData = new List<int[]>();
41
29
 
30
+ public Form1()
31
+ {
32
+ InitializeComponent();
33
+ DummyData(); // test.csv作成
34
+ }
35
+
36
+ private void DummyData()
37
+ {
38
+ // 内容に特に意味はない(例がなかったので適当)
39
+ string s = "No,Prime,Fibonacci\n1,2,0\n2,3,1\n3,5,1\n4,7,2\n5,11,3\n6,13,5\n7,17,8\n8,19,13\n9,23,21\n10,29,34\n";
40
+
41
+ // ファイルに書き出し
42
+ File.WriteAllText("test.csv", s);
43
+ }
44
+
45
+ // 読み込みボタン
46
+ private void button1_Click(object sender, EventArgs e)
47
+ {
48
+ // ファイルを開くダイアログ
49
+ OpenFileDialog openFileDialog = new OpenFileDialog
50
+ {
51
+ Filter = "CSVファイル(*.csv)|*.csv",
52
+ };
53
+
54
+ // ファイルを選ばなかったら処理終わり
55
+ if (openFileDialog.ShowDialog() != DialogResult.OK) return;
56
+
57
+ // 選んだファイルのパス
58
+ string filePath = openFileDialog.FileName;
59
+
60
+ // ファイルを1行ずつ読む(けど最初の行はとばす
61
+ foreach (string line in File.ReadLines(filePath).Skip(1))
62
+ {
63
+ // 1行をカンマで分割
64
+ string[] strArray = line.Split(',');
65
+
66
+ // string[]からint[]に変換
67
+ // [C# - C# string配列 を int配列 に変換したい(スッキリとしたコードで)|teratail](https://teratail.com/questions/48472)
68
+ int[] intArray = strArray.Select(int.Parse).ToArray();
69
+
70
+ // csvDataに追加
71
+ csvData.Add(intArray);
72
+ }
73
+ }
74
+
75
+ // 計算ボタン
76
+ private void button2_Click(object sender, EventArgs e)
77
+ {
78
+ // 各行に No,Prime,Fibonacci とある前提
79
+
80
+ int sumPrime = 0; // Primeの合計
81
+ int sumFibonacci = 0; // Fibonacciの合計
82
+
83
+ // csvDataを1件ずつループ
84
+ foreach (int[] intArray in csvData)
85
+ {
86
+ sumPrime += intArray[1];
87
+ sumFibonacci += intArray[2];
88
+ }
89
+
90
+ // 件数・合計の表示
91
+ label1.Text = $"{csvData.Count} 件\nPrime合計: {sumPrime}\nFibonacci合計: {sumFibonacci}";
92
+ }
93
+ }
94
+ }
95
+ ```
96
+ 説明多めにしたつもりですが、わからない点があればコメントしてください。
97
+
98
+ ---
99
+
100
+ 追記 各行数字ひとつ版
101
+
102
+ ```cs
103
+ using System;
104
+ using System.Data;
105
+ using System.IO;
106
+ using System.Linq;
107
+ using System.Windows.Forms;
42
108
 
43
109
  namespace Questions374940
44
-
45
110
  {
46
-
47
111
  public partial class Form1 : Form
48
-
49
112
  {
50
-
51
- // 「別クラスからどうのこうの」ということがなければ、別にstatic
113
+ // button2を先押されるとエラーにるので無駄だが0個で作っとくw
52
-
53
- // フィールド(メンバ変数)は、button1_Clickからもbutton2_Clickからもアクセスできます
54
-
55
- private List<int[]> csvData = new List<int[]>();
114
+ private int[] intArray = new int[0];
56
-
57
-
58
115
 
59
116
  public Form1()
60
-
61
117
  {
62
-
63
118
  InitializeComponent();
64
-
65
- DummyData(); // test.csv作成
119
+ DummyData();
66
-
67
120
  }
68
121
 
69
-
70
-
71
122
  private void DummyData()
72
-
73
123
  {
74
-
75
- // 内容に特に意味はない(例がなかったので適当)
76
-
77
- string s = "No,Prime,Fibonacci\n1,2,0\n2,3,1\n3,5,1\n4,7,2\n5,11,3\n6,13,5\n7,17,8\n8,19,13\n9,23,21\n10,29,34\n";
124
+ string s = "13\n14\n34\n45\n45\n70\n46\n113\n133\n";
78
-
79
-
80
-
81
- // ファイルに書き出し
82
-
83
125
  File.WriteAllText("test.csv", s);
84
-
85
126
  }
86
127
 
87
-
88
-
89
- // 読み込みボタン
90
-
91
128
  private void button1_Click(object sender, EventArgs e)
92
-
93
129
  {
94
-
95
- // ファイルを開くダイアログ
96
-
97
130
  OpenFileDialog openFileDialog = new OpenFileDialog
98
-
99
131
  {
100
-
101
132
  Filter = "CSVファイル(*.csv)|*.csv",
102
-
103
133
  };
104
-
105
-
106
-
107
- // ファイルを選ばなかったら処理終わり
108
-
109
134
  if (openFileDialog.ShowDialog() != DialogResult.OK) return;
110
-
111
-
112
-
113
- // 選んだファイルのパス
114
135
 
115
136
  string filePath = openFileDialog.FileName;
116
137
 
138
+ // ファイルを全部読む(最後に改行があるとエラーになるので取っておく)
139
+ string text = File.ReadAllText(filePath).Trim();
117
140
 
141
+ // 空白文字(スペースや改行)で分割
142
+ string[] strArray = text.Split();
118
143
 
119
- // ファイルを1行ずつ読む(けど最初の行はとばす
120
-
121
- foreach (string line in File.ReadLines(filePath).Skip(1))
122
-
123
- {
124
-
125
- // 1行をカンマで分割
126
-
127
- string[] strArray = line.Split(',');
128
-
129
-
130
-
131
- // string[]からint[]に変換
144
+ // string[]からint[]に変換
132
-
133
- // [C# - C# string配列 を int配列 に変換したい(スッキリとしたコードで)|teratail](https://teratail.com/questions/48472)
134
-
135
- int[] intArray = strArray.Select(int.Parse).ToArray();
145
+ intArray = strArray.Select(int.Parse).ToArray();
136
-
137
-
138
-
139
- // csvDataに追加
140
-
141
- csvData.Add(intArray);
142
-
143
- }
144
-
145
146
  }
146
147
 
147
-
148
-
149
- // 計算ボタン
150
-
151
148
  private void button2_Click(object sender, EventArgs e)
152
-
153
149
  {
154
-
155
- // 各行に No,Prime,Fibonacci とある前提
156
-
157
-
158
-
159
- int sumPrime = 0; // Primeの合計
160
-
161
- int sumFibonacci = 0; // Fibonacciの合計
162
-
163
-
164
-
165
- // csvDataを1件ずつループ
166
-
167
- foreach (int[] intArray in csvData)
168
-
169
- {
170
-
171
- sumPrime += intArray[1];
150
+ int sum = Hoge.Sum(intArray);
172
-
173
- sumFibonacci += intArray[2];
174
-
175
- }
176
-
177
-
178
-
179
- // 件数・合計の表示
180
-
181
- label1.Text = $"{csvData.Count} 件\nPrime合計: {sumPrime}\nFibonacci合計: {sumFibonacci}";
151
+ label1.Text = $"{intArray.Length} 件\n合計: {sum}";
182
-
183
152
  }
184
153
 
185
154
  }
186
155
 
156
+ class Hoge
157
+ {
158
+ public static int Sum(int[] intArray)
159
+ {
160
+ int sum = 0;
161
+ foreach (int i in intArray)
162
+ {
163
+ sum += i;
164
+ }
165
+ return sum;
166
+ }
167
+ }
187
168
  }
188
-
189
169
  ```
190
-
191
- 説明多めにしたつもりですが、わからない点があればコメントしてください。
192
-
193
-
194
-
195
- ---
196
-
197
-
198
-
199
- 追記 各行数字ひとつ版
200
-
201
-
202
-
203
- ```C#
204
-
205
- using System;
206
-
207
- using System.Data;
208
-
209
- using System.IO;
210
-
211
- using System.Linq;
212
-
213
- using System.Windows.Forms;
214
-
215
-
216
-
217
- namespace Questions374940
218
-
219
- {
220
-
221
- public partial class Form1 : Form
222
-
223
- {
224
-
225
- // button2を先に押されるとエラーになるので無駄だが0個で作っとくw
226
-
227
- private int[] intArray = new int[0];
228
-
229
-
230
-
231
- public Form1()
232
-
233
- {
234
-
235
- InitializeComponent();
236
-
237
- DummyData();
238
-
239
- }
240
-
241
-
242
-
243
- private void DummyData()
244
-
245
- {
246
-
247
- string s = "13\n14\n34\n45\n45\n70\n46\n113\n133\n";
248
-
249
- File.WriteAllText("test.csv", s);
250
-
251
- }
252
-
253
-
254
-
255
- private void button1_Click(object sender, EventArgs e)
256
-
257
- {
258
-
259
- OpenFileDialog openFileDialog = new OpenFileDialog
260
-
261
- {
262
-
263
- Filter = "CSVファイル(*.csv)|*.csv",
264
-
265
- };
266
-
267
- if (openFileDialog.ShowDialog() != DialogResult.OK) return;
268
-
269
-
270
-
271
- string filePath = openFileDialog.FileName;
272
-
273
-
274
-
275
- // ファイルを全部読む(最後に改行があるとエラーになるので取っておく)
276
-
277
- string text = File.ReadAllText(filePath).Trim();
278
-
279
-
280
-
281
- // 空白文字(スペースや改行)で分割
282
-
283
- string[] strArray = text.Split();
284
-
285
-
286
-
287
- // string[]からint[]に変換
288
-
289
- intArray = strArray.Select(int.Parse).ToArray();
290
-
291
- }
292
-
293
-
294
-
295
- private void button2_Click(object sender, EventArgs e)
296
-
297
- {
298
-
299
- int sum = Hoge.Sum(intArray);
300
-
301
- label1.Text = $"{intArray.Length} 件\n合計: {sum}";
302
-
303
- }
304
-
305
-
306
-
307
- }
308
-
309
-
310
-
311
- class Hoge
312
-
313
- {
314
-
315
- public static int Sum(int[] intArray)
316
-
317
- {
318
-
319
- int sum = 0;
320
-
321
- foreach (int i in intArray)
322
-
323
- {
324
-
325
- sum += i;
326
-
327
- }
328
-
329
- return sum;
330
-
331
- }
332
-
333
- }
334
-
335
- }
336
-
337
- ```

1

各行数字ひとつ版

2021/12/24 12:09

投稿

TN8001
TN8001

スコア9862

test CHANGED
@@ -189,3 +189,149 @@
189
189
  ```
190
190
 
191
191
  説明多めにしたつもりですが、わからない点があればコメントしてください。
192
+
193
+
194
+
195
+ ---
196
+
197
+
198
+
199
+ 追記 各行数字ひとつ版
200
+
201
+
202
+
203
+ ```C#
204
+
205
+ using System;
206
+
207
+ using System.Data;
208
+
209
+ using System.IO;
210
+
211
+ using System.Linq;
212
+
213
+ using System.Windows.Forms;
214
+
215
+
216
+
217
+ namespace Questions374940
218
+
219
+ {
220
+
221
+ public partial class Form1 : Form
222
+
223
+ {
224
+
225
+ // button2を先に押されるとエラーになるので無駄だが0個で作っとくw
226
+
227
+ private int[] intArray = new int[0];
228
+
229
+
230
+
231
+ public Form1()
232
+
233
+ {
234
+
235
+ InitializeComponent();
236
+
237
+ DummyData();
238
+
239
+ }
240
+
241
+
242
+
243
+ private void DummyData()
244
+
245
+ {
246
+
247
+ string s = "13\n14\n34\n45\n45\n70\n46\n113\n133\n";
248
+
249
+ File.WriteAllText("test.csv", s);
250
+
251
+ }
252
+
253
+
254
+
255
+ private void button1_Click(object sender, EventArgs e)
256
+
257
+ {
258
+
259
+ OpenFileDialog openFileDialog = new OpenFileDialog
260
+
261
+ {
262
+
263
+ Filter = "CSVファイル(*.csv)|*.csv",
264
+
265
+ };
266
+
267
+ if (openFileDialog.ShowDialog() != DialogResult.OK) return;
268
+
269
+
270
+
271
+ string filePath = openFileDialog.FileName;
272
+
273
+
274
+
275
+ // ファイルを全部読む(最後に改行があるとエラーになるので取っておく)
276
+
277
+ string text = File.ReadAllText(filePath).Trim();
278
+
279
+
280
+
281
+ // 空白文字(スペースや改行)で分割
282
+
283
+ string[] strArray = text.Split();
284
+
285
+
286
+
287
+ // string[]からint[]に変換
288
+
289
+ intArray = strArray.Select(int.Parse).ToArray();
290
+
291
+ }
292
+
293
+
294
+
295
+ private void button2_Click(object sender, EventArgs e)
296
+
297
+ {
298
+
299
+ int sum = Hoge.Sum(intArray);
300
+
301
+ label1.Text = $"{intArray.Length} 件\n合計: {sum}";
302
+
303
+ }
304
+
305
+
306
+
307
+ }
308
+
309
+
310
+
311
+ class Hoge
312
+
313
+ {
314
+
315
+ public static int Sum(int[] intArray)
316
+
317
+ {
318
+
319
+ int sum = 0;
320
+
321
+ foreach (int i in intArray)
322
+
323
+ {
324
+
325
+ sum += i;
326
+
327
+ }
328
+
329
+ return sum;
330
+
331
+ }
332
+
333
+ }
334
+
335
+ }
336
+
337
+ ```