質問編集履歴

4

修正

2021/04/15 01:05

投稿

natume4948
natume4948

スコア9

test CHANGED
File without changes
test CHANGED
@@ -12,7 +12,35 @@
12
12
 
13
13
  ### 発生している問題・エラーメッセージ
14
14
 
15
+ エラー文
16
+
15
- 問題はopendialogではファイルの受け渡しは出来ているのだが、DataGridViewには表示されないで何が原因なのかご助言いただけると幸い
17
+ Microsoft.VisualBasic.FileIO.MalformedLineException: '現在区切り記号使用して、行 5 を解析きません'
18
+
19
+ ```C#エラー場所
20
+
21
+ while (!parser.EndOfData)
22
+
23
+ {
24
+
25
+ data = parser.ReadFields();
26
+
27
+ int fieldCount = data.Length;
28
+
29
+ DataRow row = dt.NewRow();
30
+
31
+ for (int i = 0; i < fieldCount; i++)
32
+
33
+ {
34
+
35
+ row[i] = data[i];
36
+
37
+ }
38
+
39
+ dt.Rows.Add(row);
40
+
41
+ }
42
+
43
+ ```
16
44
 
17
45
 
18
46
 
@@ -344,24 +372,34 @@
344
372
 
345
373
  問題点
346
374
 
375
+ private void ReadCSV(DataTable dt, bool hasHeader, string FileName, string separator, bool quote)
376
+
377
+ {
378
+
379
+ //CSVを便利に読み込んでくれるTextFieldParserを使います。
380
+
381
+ TextFieldParser parser = new TextFieldParser(FileName, Encoding.GetEncoding("shift_jis"));
382
+
383
+ Console.WriteLine("OK");
384
+
385
+ //これは可変長のフィールドでフィールドの区切りのマーカーが使われている場合です。
386
+
387
+ //フィールドが固定長の場合は
388
+
389
+ //parser.TextFieldType = FieldType.FixedWidth;
390
+
347
- parser.TextFieldType = FieldType.Delimited;
391
+ parser.TextFieldType = FieldType.Delimited;
348
-
349
-
350
392
 
351
393
  parser.Delimiters = new string[] { "," };
352
394
 
353
-
354
-
355
-
356
-
357
395
  // 空白文字をトリム
358
396
 
359
397
  parser.TrimWhiteSpace = true;
360
398
 
361
-
362
-
363
399
  parser.HasFieldsEnclosedInQuotes = true;
364
400
 
401
+ Console.WriteLine("OK!");
402
+
365
403
  string[] data;
366
404
 
367
405
  //ここのif文では、DataTableに必要なカラムを追加するために最初に1行だけ読み込んでいます。
@@ -430,15 +468,19 @@
430
468
 
431
469
  }
432
470
 
471
+ Console.WriteLine("ここまで");
472
+
433
473
  //ここのループがCSVを読み込むメインの処理です。
434
474
 
435
475
  //内容は先ほどとほとんど一緒です。
436
476
 
477
+        ↓ここからが原因だと考えます。
478
+
437
479
  while (!parser.EndOfData)
438
480
 
439
481
  {
440
482
 
441
- data = parser.ReadFields();
483
+ data = parser.ReadFields();←エラー
442
484
 
443
485
  int fieldCount = data.Length;
444
486
 
@@ -456,4 +498,6 @@
456
498
 
457
499
  }
458
500
 
501
+ }
502
+
459
503
  ```

3

画像の追加

2021/04/15 01:04

投稿

natume4948
natume4948

スコア9

test CHANGED
File without changes
test CHANGED
@@ -330,4 +330,130 @@
330
330
 
331
331
  ↑完成形
332
332
 
333
+ ![イメージ説明](b2444ab0857d2c5373feaed75542e100.png)
334
+
335
+ ↑CSVの中身
336
+
333
337
  ここにより詳細な情報を記載してください。
338
+
339
+ 追記ーーーーーーーーーーー
340
+
341
+ SurferOnWww様回答ありがとうございます。参考サイトをみて変更してみたのですが、DataGridViewには何も表示されませんでした。自分で原因はここだろうと絞り込んで見たのですが、私の考えとしましてはこれは、""や,の含まれている処理が機能できていないため、何も返ってこないと考えております。CSVの中身も記載しておきます。
342
+
343
+ ```C#
344
+
345
+ 問題点
346
+
347
+ parser.TextFieldType = FieldType.Delimited;
348
+
349
+
350
+
351
+ parser.Delimiters = new string[] { "," };
352
+
353
+
354
+
355
+
356
+
357
+ // 空白文字をトリム
358
+
359
+ parser.TrimWhiteSpace = true;
360
+
361
+
362
+
363
+ parser.HasFieldsEnclosedInQuotes = true;
364
+
365
+ string[] data;
366
+
367
+ //ここのif文では、DataTableに必要なカラムを追加するために最初に1行だけ読み込んでいます。
368
+
369
+ //データがあるか確認します。
370
+
371
+ if (!parser.EndOfData)
372
+
373
+ {
374
+
375
+ //CSVファイルから1行読み取ります。
376
+
377
+ data = parser.ReadFields();
378
+
379
+ //カラムの数を取得します。
380
+
381
+ int cols = data.Length;
382
+
383
+ if (hasHeader)
384
+
385
+ {
386
+
387
+ for (int i = 0; i < cols; i++)
388
+
389
+ {
390
+
391
+ dt.Columns.Add(new DataColumn(data[i]));
392
+
393
+ }
394
+
395
+ }
396
+
397
+ else
398
+
399
+ {
400
+
401
+ for (int i = 0; i < cols; i++)
402
+
403
+ {
404
+
405
+ //カラム名にダミーを設定します。
406
+
407
+ dt.Columns.Add(new DataColumn());
408
+
409
+ }
410
+
411
+ //DataTableに追加するための新規行を取得します。
412
+
413
+ DataRow row = dt.NewRow();
414
+
415
+ for (int i = 0; i < cols; i++)
416
+
417
+ {
418
+
419
+ //カラムの数だけデータをうつします。
420
+
421
+ row[i] = data[i];
422
+
423
+ }
424
+
425
+ //DataTableに追加します。
426
+
427
+ dt.Rows.Add(row);
428
+
429
+ }
430
+
431
+ }
432
+
433
+ //ここのループがCSVを読み込むメインの処理です。
434
+
435
+ //内容は先ほどとほとんど一緒です。
436
+
437
+ while (!parser.EndOfData)
438
+
439
+ {
440
+
441
+ data = parser.ReadFields();
442
+
443
+ int fieldCount = data.Length;
444
+
445
+ DataRow row = dt.NewRow();
446
+
447
+ for (int i = 0; i < fieldCount; i++)
448
+
449
+ {
450
+
451
+ row[i] = data[i];
452
+
453
+ }
454
+
455
+ dt.Rows.Add(row);
456
+
457
+ }
458
+
459
+ ```

2

画像の追加

2021/04/14 08:58

投稿

natume4948
natume4948

スコア9

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- ### 前提・実現したいこと
1
+ 前提・実現したいこと
2
2
 
3
3
  DataGridViewにOpenDialogで選択したCSVファイルを表示させたい。
4
4
 
@@ -324,4 +324,10 @@
324
324
 
325
325
  ![イメージ説明](f64834d14a556fc8685e58dc7d69c1dd.png)
326
326
 
327
+ ↑現在の状況
328
+
329
+ ![イメージ説明](bd9e62c238df6721d588c3ba62abc6dd.png)###
330
+
331
+ ↑完成形
332
+
327
333
  ここにより詳細な情報を記載してください。

1

誤字

2021/04/14 06:33

投稿

natume4948
natume4948

スコア9

test CHANGED
@@ -1 +1 @@
1
- SVCを読み込んでDataGridViewに表示させたい。
1
+ CSVを読み込んでDataGridViewに表示させたい。
test CHANGED
@@ -1,10 +1,10 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- DataGridViewにOpenDialogで選択したSVCファイルを表示させたい。
3
+ DataGridViewにOpenDialogで選択したCSVファイルを表示させたい。
4
4
 
5
5
  ここに質問の内容を詳しく書いてください。
6
6
 
7
- WindowsFormsを使ってOpenDialogで選択したSVCファイルをDataGridViewを表示させたい。
7
+ WindowsFormsを使ってOpenDialogで選択したCSVファイルをDataGridViewを表示させたい。
8
8
 
9
9
  ■■な機能を実装中に以下のエラーメッセージが発生しました。
10
10
 
@@ -316,7 +316,7 @@
316
316
 
317
317
  Console.WriteLine(odf.FileName);
318
318
 
319
- でOpenDialogからファイルの受け渡しが出来ているのは出来ているのでReadSVCが未完成状態が原因だと考えています。
319
+ でOpenDialogからファイルの受け渡しが出来ているのは出来ているのでReadCSVが未完成状態が原因だと考えています。
320
320
 
321
321
  ### 補足情報(FW/ツールのバージョンなど)
322
322