teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

修正

2021/04/15 01:05

投稿

natume4948
natume4948

スコア9

title CHANGED
File without changes
body CHANGED
@@ -5,7 +5,21 @@
5
5
  ■■な機能を実装中に以下のエラーメッセージが発生しました。
6
6
 
7
7
  ### 発生している問題・エラーメッセージ
8
+ エラー文
8
- 問題はopendialogではファイル受け渡は出来いるのだがDataGridViewには表示されないので何が原因なのかご助言いただけると幸い
9
+ Microsoft.VisualBasic.FileIO.MalformedLineException: '現在区切り記号を使用して、行 5 解析きません'
10
+ ```C#エラー場所
11
+ while (!parser.EndOfData)
12
+ {
13
+ data = parser.ReadFields();
14
+ int fieldCount = data.Length;
15
+ DataRow row = dt.NewRow();
16
+ for (int i = 0; i < fieldCount; i++)
17
+ {
18
+ row[i] = data[i];
19
+ }
20
+ dt.Rows.Add(row);
21
+ }
22
+ ```
9
23
 
10
24
 
11
25
  ### 該当のソースコード
@@ -171,15 +185,20 @@
171
185
  SurferOnWww様回答ありがとうございます。参考サイトをみて変更してみたのですが、DataGridViewには何も表示されませんでした。自分で原因はここだろうと絞り込んで見たのですが、私の考えとしましてはこれは、""や,の含まれている処理が機能できていないため、何も返ってこないと考えております。CSVの中身も記載しておきます。
172
186
  ```C#
173
187
  問題点
188
+ private void ReadCSV(DataTable dt, bool hasHeader, string FileName, string separator, bool quote)
189
+ {
190
+ //CSVを便利に読み込んでくれるTextFieldParserを使います。
191
+ TextFieldParser parser = new TextFieldParser(FileName, Encoding.GetEncoding("shift_jis"));
192
+ Console.WriteLine("OK");
193
+ //これは可変長のフィールドでフィールドの区切りのマーカーが使われている場合です。
194
+ //フィールドが固定長の場合は
195
+ //parser.TextFieldType = FieldType.FixedWidth;
174
- parser.TextFieldType = FieldType.Delimited;
196
+ parser.TextFieldType = FieldType.Delimited;
175
-
176
197
  parser.Delimiters = new string[] { "," };
177
-
178
-
179
198
  // 空白文字をトリム
180
199
  parser.TrimWhiteSpace = true;
181
-
182
200
  parser.HasFieldsEnclosedInQuotes = true;
201
+ Console.WriteLine("OK!");
183
202
  string[] data;
184
203
  //ここのif文では、DataTableに必要なカラムを追加するために最初に1行だけ読み込んでいます。
185
204
  //データがあるか確認します。
@@ -214,11 +233,13 @@
214
233
  dt.Rows.Add(row);
215
234
  }
216
235
  }
236
+ Console.WriteLine("ここまで");
217
237
  //ここのループがCSVを読み込むメインの処理です。
218
238
  //内容は先ほどとほとんど一緒です。
239
+        ↓ここからが原因だと考えます。
219
240
  while (!parser.EndOfData)
220
241
  {
221
- data = parser.ReadFields();
242
+ data = parser.ReadFields();←エラー
222
243
  int fieldCount = data.Length;
223
244
  DataRow row = dt.NewRow();
224
245
  for (int i = 0; i < fieldCount; i++)
@@ -227,4 +248,5 @@
227
248
  }
228
249
  dt.Rows.Add(row);
229
250
  }
251
+ }
230
252
  ```

3

画像の追加

2021/04/15 01:04

投稿

natume4948
natume4948

スコア9

title CHANGED
File without changes
body CHANGED
@@ -164,4 +164,67 @@
164
164
  ↑現在の状況
165
165
  ![イメージ説明](bd9e62c238df6721d588c3ba62abc6dd.png)###
166
166
  ↑完成形
167
+ ![イメージ説明](b2444ab0857d2c5373feaed75542e100.png)
168
+ ↑CSVの中身
167
- ここにより詳細な情報を記載してください。
169
+ ここにより詳細な情報を記載してください。
170
+ 追記ーーーーーーーーーーー
171
+ SurferOnWww様回答ありがとうございます。参考サイトをみて変更してみたのですが、DataGridViewには何も表示されませんでした。自分で原因はここだろうと絞り込んで見たのですが、私の考えとしましてはこれは、""や,の含まれている処理が機能できていないため、何も返ってこないと考えております。CSVの中身も記載しておきます。
172
+ ```C#
173
+ 問題点
174
+ parser.TextFieldType = FieldType.Delimited;
175
+
176
+ parser.Delimiters = new string[] { "," };
177
+
178
+
179
+ // 空白文字をトリム
180
+ parser.TrimWhiteSpace = true;
181
+
182
+ parser.HasFieldsEnclosedInQuotes = true;
183
+ string[] data;
184
+ //ここのif文では、DataTableに必要なカラムを追加するために最初に1行だけ読み込んでいます。
185
+ //データがあるか確認します。
186
+ if (!parser.EndOfData)
187
+ {
188
+ //CSVファイルから1行読み取ります。
189
+ data = parser.ReadFields();
190
+ //カラムの数を取得します。
191
+ int cols = data.Length;
192
+ if (hasHeader)
193
+ {
194
+ for (int i = 0; i < cols; i++)
195
+ {
196
+ dt.Columns.Add(new DataColumn(data[i]));
197
+ }
198
+ }
199
+ else
200
+ {
201
+ for (int i = 0; i < cols; i++)
202
+ {
203
+ //カラム名にダミーを設定します。
204
+ dt.Columns.Add(new DataColumn());
205
+ }
206
+ //DataTableに追加するための新規行を取得します。
207
+ DataRow row = dt.NewRow();
208
+ for (int i = 0; i < cols; i++)
209
+ {
210
+ //カラムの数だけデータをうつします。
211
+ row[i] = data[i];
212
+ }
213
+ //DataTableに追加します。
214
+ dt.Rows.Add(row);
215
+ }
216
+ }
217
+ //ここのループがCSVを読み込むメインの処理です。
218
+ //内容は先ほどとほとんど一緒です。
219
+ while (!parser.EndOfData)
220
+ {
221
+ data = parser.ReadFields();
222
+ int fieldCount = data.Length;
223
+ DataRow row = dt.NewRow();
224
+ for (int i = 0; i < fieldCount; i++)
225
+ {
226
+ row[i] = data[i];
227
+ }
228
+ dt.Rows.Add(row);
229
+ }
230
+ ```

2

画像の追加

2021/04/14 08:58

投稿

natume4948
natume4948

スコア9

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,4 @@
1
- ### 前提・実現したいこと
1
+ 前提・実現したいこと
2
2
  DataGridViewにOpenDialogで選択したCSVファイルを表示させたい。
3
3
  ここに質問の内容を詳しく書いてください。
4
4
  WindowsFormsを使ってOpenDialogで選択したCSVファイルをDataGridViewを表示させたい。
@@ -161,4 +161,7 @@
161
161
  ### 補足情報(FW/ツールのバージョンなど)
162
162
  visual studio2019
163
163
  ![イメージ説明](f64834d14a556fc8685e58dc7d69c1dd.png)
164
+ ↑現在の状況
165
+ ![イメージ説明](bd9e62c238df6721d588c3ba62abc6dd.png)###
166
+ ↑完成形
164
167
  ここにより詳細な情報を記載してください。

1

誤字

2021/04/14 06:33

投稿

natume4948
natume4948

スコア9

title CHANGED
@@ -1,1 +1,1 @@
1
- SVCを読み込んでDataGridViewに表示させたい。
1
+ CSVを読み込んでDataGridViewに表示させたい。
body CHANGED
@@ -1,7 +1,7 @@
1
1
  ### 前提・実現したいこと
2
- DataGridViewにOpenDialogで選択したSVCファイルを表示させたい。
2
+ DataGridViewにOpenDialogで選択したCSVファイルを表示させたい。
3
3
  ここに質問の内容を詳しく書いてください。
4
- WindowsFormsを使ってOpenDialogで選択したSVCファイルをDataGridViewを表示させたい。
4
+ WindowsFormsを使ってOpenDialogで選択したCSVファイルをDataGridViewを表示させたい。
5
5
  ■■な機能を実装中に以下のエラーメッセージが発生しました。
6
6
 
7
7
  ### 発生している問題・エラーメッセージ
@@ -157,7 +157,7 @@
157
157
 
158
158
  ここに問題に対して試したことを記載してください。
159
159
  Console.WriteLine(odf.FileName);
160
- でOpenDialogからファイルの受け渡しが出来ているのは出来ているのでReadSVCが未完成状態が原因だと考えています。
160
+ でOpenDialogからファイルの受け渡しが出来ているのは出来ているのでReadCSVが未完成状態が原因だと考えています。
161
161
  ### 補足情報(FW/ツールのバージョンなど)
162
162
  visual studio2019
163
163
  ![イメージ説明](f64834d14a556fc8685e58dc7d69c1dd.png)