質問編集履歴

1

文字修正

2016/06/17 08:00

投稿

kumakumatan
kumakumatan

スコア213

test CHANGED
File without changes
test CHANGED
@@ -2,8 +2,6 @@
2
2
 
3
3
  ABC123,テスト A,123456,060-5938-1234,
4
4
 
5
- ABg456,テスト B,1234567,060-7886-567,
6
-
7
5
  ABfD456,テスト E,123459,060-4697-8912,テスト
8
6
 
9
7
  ABCD789,テスト F,1234581,060-4577-8913,
@@ -46,61 +44,455 @@
46
44
 
47
45
  public static void main(String[] args) {
48
46
 
47
+
48
+
49
+ FieldChk01 Chk01 = new FieldChk01();
50
+
51
+
52
+
53
+ Chk01.method();
54
+
55
+
56
+
57
+ FieldChk02 Chk02 = new FieldChk02();
58
+
59
+
60
+
61
+ Chk02.method();
62
+
63
+
64
+
65
+
66
+
67
+ FReadDistinct Chk03 = new FReadDistinct();
68
+
69
+
70
+
71
+
72
+
73
+ Chk03.method();
74
+
75
+
76
+
77
+
78
+
79
+ if(Chk01.flg == 0 && FieldChk02.flg == 0 && Chk03.flg2 == 0) {
80
+
81
+ System.out.println("正常処理!!");
82
+
83
+ }
84
+
85
+
86
+
87
+ }
88
+
89
+
90
+
91
+ }
92
+
93
+ ```
94
+
95
+ ```JAVA
96
+
97
+ /**
98
+
99
+ * CSV入力値(A列~D列)のチェック
100
+
101
+ * @param args
102
+
103
+ */
104
+
105
+
106
+
107
+ package csvRead;
108
+
109
+
110
+
111
+ import java.io.BufferedReader;
112
+
113
+ import java.io.File;
114
+
115
+ import java.io.FileInputStream;
116
+
117
+ import java.io.FileNotFoundException;
118
+
119
+ import java.io.IOException;
120
+
121
+ import java.io.InputStreamReader;
122
+
123
+ import java.io.UnsupportedEncodingException;
124
+
125
+ import java.util.regex.Pattern;
126
+
127
+
128
+
129
+ public class FieldChk01 {
130
+
131
+ //処理フラグ(0なら正常:1以上なら異常)
132
+
133
+ int flg = 0;
134
+
135
+
136
+
137
+ public void method() {
138
+
139
+
140
+
141
+
142
+
143
+ try {
144
+
145
+
146
+
147
+ File file = new File("C:\\sample.csv");
148
+
149
+
150
+
151
+ // 入力ストリームを生成。( FileNotFoundException が発生 )
152
+
153
+ FileInputStream input = new FileInputStream(file);
154
+
155
+ /* 入力ストリームの読み込み。 ( UnsupportedEncodingException が発生 )
156
+
157
+ * ここでCSVファイルの文字コードを設定しないと文字化けします。 */
158
+
159
+ // 読み込むファイルの文字コード(SJIS)
160
+
161
+ InputStreamReader stream = new InputStreamReader(input, "SJIS");
162
+
163
+ // バッファに取り込み。
164
+
165
+
166
+
167
+ BufferedReader buffer = new BufferedReader(stream);
168
+
169
+
170
+
171
+
172
+
173
+ String line;
174
+
175
+ //読み込み件数
176
+
177
+ int count = 0;
178
+
179
+ //配列数
180
+
181
+ //int len1 = 0;
182
+
183
+
184
+
185
+ /* readLine()でバッファの1行を取り出す作業を、読み込める行が無くなるまでwhile文で実行。
186
+
187
+ * line = buffer.readline() でBufferedReaderが保持する一行を取出しているので、ループする毎に書き変わります。 */
188
+
189
+ while((line = buffer.readLine()) != null) {
190
+
191
+ // 取出した1行の文字セットを変換して新たに文字列を生成。
192
+
193
+ byte[] b = line.getBytes();
194
+
195
+ // String で UnsupportedEncodingException が発生 (変換したい文字コード:UTF-8)
196
+
197
+ line = new String(b, "UTF-8");
198
+
199
+ // 文字列をカンマ区切りで配列に分けて要素ごとに出力。
200
+
201
+ // line.splitの第2引数に"-1"を指定しないと、他の行と要素数が
202
+
203
+ // 違うため、出力結果の様にはなりません。
204
+
205
+ String[] columns = line.split(",", -1);
206
+
207
+
208
+
209
+ // 読み込み行数カウント
210
+
211
+ count++;
212
+
213
+
214
+
215
+
216
+
217
+ Pattern p1 = Pattern.compile("^[0-9]+$"); // 番号
218
+
219
+ Pattern p2 = Pattern.compile("^[0-9]{3}-[0-9]{4}-[0-9]{4}$"); // 電話番号
220
+
221
+ // 数字が含まれていればOK(社員番号)
222
+
223
+ Pattern p3 = Pattern.compile("^[0-9a-zA-Z]+$"); //社員番号(英数字文字のみが1文字以上)
224
+
225
+ Pattern p4 = Pattern.compile("^[^\\d]+$"); // 簡単な正規表現(単純に数字が含まれていないというのを確認)
226
+
227
+
228
+
229
+ for(int j = 0; j < columns.length; j++) {
230
+
231
+ //for(int j = 0; j < 4; j++) {
232
+
233
+ //System.out.println(j + " : " + columns[j]);
234
+
235
+
236
+
237
+ //データ型チェック開始
238
+
239
+ if(j == 0 && p3.matcher(columns[j]).matches() == false) {
240
+
241
+ System.out.println(count + "行目の" + "【1列目】入力規則違反。【入力値: " + columns[j] + "】");
242
+
243
+ flg++;
244
+
245
+ } else if(j == 1 && p4.matcher(columns[j]).matches() == false) {
246
+
247
+ //if(j == 1 && p4.matcher(columns[j]).matches() == false) {
248
+
249
+ System.out.println(count + "行目の" + "【2列目】入力規則違反。【入力値: " + columns[j] + "】");
250
+
251
+ flg++;
252
+
253
+ } else if(j == 2 && p1.matcher(columns[j]).matches() == false) {
254
+
255
+ System.out.println(count + "行目の" + "【3列目】入力規則違反。【入力値: " + columns[j] + "】");
256
+
257
+ flg++;
258
+
259
+ } else if(j == 3 && p2.matcher(columns[j]).matches() == false) {
260
+
261
+ System.out.println(count + "行目の" + "【4列目】入力規則違反。【入力値: " + columns[j] + "】");
262
+
263
+ flg++;
264
+
265
+ }
266
+
267
+
268
+
269
+ //データ型チェック終了
270
+
271
+ }
272
+
273
+
274
+
275
+ }
276
+
277
+
278
+
279
+
280
+
281
+ // 開いたストリームとバッファを閉じて関連するシステム・リソースを解放します。 ( IOException が発生 )
282
+
283
+ input.close();
284
+
285
+ stream.close();
286
+
287
+ buffer.close();
288
+
289
+
290
+
291
+ } catch (UnsupportedEncodingException | FileNotFoundException e) {
292
+
293
+ e.printStackTrace();
294
+
295
+
296
+
297
+ } catch (IOException e) {
298
+
299
+ e.printStackTrace();
300
+
301
+
302
+
303
+ }
304
+
305
+
306
+
307
+ }
308
+
309
+
310
+
311
+ }
312
+
313
+ ```
314
+
315
+ ```java
316
+
317
+ /**
318
+
319
+ * CSV配列数のチェック(A~D列以外はNG)
320
+
321
+ * @param args
322
+
323
+ */
324
+
325
+
326
+
327
+ package csvRead;
328
+
329
+
330
+
331
+ import java.io.BufferedReader;
332
+
333
+ import java.io.File;
334
+
335
+ import java.io.FileInputStream;
336
+
337
+ import java.io.FileNotFoundException;
338
+
339
+ import java.io.IOException;
340
+
341
+ import java.io.InputStreamReader;
342
+
343
+ import java.io.UnsupportedEncodingException;
344
+
345
+
346
+
347
+ public class FieldChk02 {
348
+
349
+ //処理フラグ(0なら正常:1以上なら異常)
350
+
351
+ static int flg = 0;
352
+
353
+
354
+
355
+ //public static void main(String[] args) {
356
+
357
+ // クラス化
358
+
359
+ public void method() {
360
+
49
361
  // ここにコードを挿入
50
362
 
51
363
 
52
364
 
53
- // FieldChk01クラスをインスタンス化する
54
-
55
- FieldChk01 Chk01 = new FieldChk01();
56
-
57
-
58
-
59
- // FieldChk01クラスのmethodを呼び出す
60
-
61
- Chk01.method();
62
-
63
-
64
-
65
- // FieldChk02クラスをインスタンス化する
66
-
67
- FieldChk02 Chk02 = new FieldChk02();
68
-
69
-
70
-
71
- // FieldChk02クラスmethod呼び出
72
-
73
- Chk02.method();
74
-
75
-
76
-
77
- // FReadDistinctクラスをインスタンス化する
78
-
79
- FReadDistinct Chk03 = new FReadDistinct();
80
-
81
-
82
-
83
- // FReadDistinctクラスのmethodを呼び出す
84
-
85
- Chk03.method();
86
-
87
-
88
-
89
- //処理フラグの表示
90
-
91
- // FieldChk01クラスのflg変の呼び出し
92
-
93
- // FieldChk02クラスのflg変数の呼び出し
94
-
95
- // FReadDistinctクラスのflg変数の呼び出し
96
-
97
- //System.out.println(Chk01.flg);
98
-
99
-
100
-
101
- if(Chk01.flg == 0 && FieldChk02.flg == 0 && Chk03.flg2 == 0) {
102
-
103
- System.out.println("正常処理!!");
365
+ try {
366
+
367
+
368
+
369
+ // ファイルのパスを指定してオブジェクトを生成。
370
+
371
+ File file = new File("C:\\sample.csv");
372
+
373
+ //File file = new File(path2);
374
+
375
+
376
+
377
+ // 入力ストリームを生成。( FileNotFoundException が発生 )
378
+
379
+ FileInputStream input = new FileInputStream(file);
380
+
381
+ /* 入力ストリームの読み込み。 ( UnsupportedEncodingException が発生 )
382
+
383
+ * ここでCSVファイル文字コード設定しないと文字化けしま。 */
384
+
385
+ // 読み込むファイルの文字コード(SJIS)
386
+
387
+ InputStreamReader stream = new InputStreamReader(input, "SJIS");
388
+
389
+ // バッファに取り込み。
390
+
391
+
392
+
393
+ BufferedReader buffer = new BufferedReader(stream);
394
+
395
+
396
+
397
+ String line;
398
+
399
+ //読み込み件数
400
+
401
+ int count = 0;
402
+
403
+ //配列
404
+
405
+ int len1 = 0;
406
+
407
+
408
+
409
+ /* readLine()でバッファの1行を取り出す作業を、読み込める行が無くなるまでwhile文で実行。
410
+
411
+ * line = buffer.readline() でBufferedReaderが保持する一行を取出しているので、ループする毎に書き変わります。 */
412
+
413
+ while((line = buffer.readLine()) != null) {
414
+
415
+ // 取出した1行の文字セットを変換して新たに文字列を生成。
416
+
417
+ byte[] b = line.getBytes();
418
+
419
+ // String で UnsupportedEncodingException が発生 (変換したい文字コード:UTF-8)
420
+
421
+ line = new String(b, "UTF-8");
422
+
423
+ // 文字列をカンマ区切りで配列に分けて要素ごとに出力。
424
+
425
+ // line.splitの第2引数に"-1"を指定しないと、他の行と要素数が
426
+
427
+ // 違うため、出力結果の様にはなりません。
428
+
429
+ String[] columns = line.split(",", 0);
430
+
431
+
432
+
433
+ // 読み込み行数カウント
434
+
435
+ count++;
436
+
437
+ //配列数定義
438
+
439
+ len1 = columns.length;
440
+
441
+
442
+
443
+ for(int j = 0; j < columns.length; j++) {
444
+
445
+ //for(int j = 0; j < 4; j++) {
446
+
447
+ //System.out.println(j + " : " + columns[j]);
448
+
449
+
450
+
451
+ }
452
+
453
+ //配列数オーバーの行表示
454
+
455
+ if(len1 > 4) {
456
+
457
+ System.out.println(count + "行目の" + len1 + "列目に不正入力データがあります。");
458
+
459
+ flg++;
460
+
461
+
462
+
463
+ }
464
+
465
+
466
+
467
+ }
468
+
469
+
470
+
471
+
472
+
473
+
474
+
475
+ // 開いたストリームとバッファを閉じて関連するシステム・リソースを解放します。 ( IOException が発生 )
476
+
477
+ input.close();
478
+
479
+ stream.close();
480
+
481
+ buffer.close();
482
+
483
+
484
+
485
+ } catch (UnsupportedEncodingException | FileNotFoundException e) {
486
+
487
+ e.printStackTrace();
488
+
489
+
490
+
491
+ } catch (IOException e) {
492
+
493
+ e.printStackTrace();
494
+
495
+
104
496
 
105
497
  }
106
498
 
@@ -114,225 +506,265 @@
114
506
 
115
507
  ```
116
508
 
117
- ```JAVA
509
+ ```java
510
+
118
-
511
+ package csvRead;
512
+
119
- /**
513
+ /*
120
-
514
+
121
- * CSV入力値(A列~D列)のチェック
515
+ * ファイル読み込みクラス(文字コードSJIS)
122
-
123
- * @param args
124
516
 
125
517
  */
126
518
 
127
519
 
128
520
 
521
+ import java.io.BufferedReader;
522
+
523
+ import java.io.FileInputStream;
524
+
525
+ import java.io.IOException;
526
+
527
+ import java.io.InputStreamReader;
528
+
529
+ import java.util.ArrayList;
530
+
531
+ import java.util.List;
532
+
533
+
534
+
535
+ public class FRead {
536
+
537
+ public static String[] getLines(String fileName) {
538
+
539
+
540
+
541
+ List<String> list = new ArrayList<String>();
542
+
543
+
544
+
545
+ BufferedReader br = null;
546
+
547
+ try {
548
+
549
+ /* 入力ストリームの読み込み。
550
+
551
+ * ここでCSVファイルの文字コードを設定しないと文字化けします。
552
+
553
+ * 読み込むファイルの文字コード(SJIS) */
554
+
555
+ br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), "SJIS"));
556
+
557
+
558
+
559
+ String line = null;
560
+
561
+ // ファイル読み込み
562
+
563
+ while((line = br.readLine()) != null) {
564
+
565
+ list.add(line);
566
+
567
+
568
+
569
+ }
570
+
571
+
572
+
573
+ // br.close();
574
+
575
+
576
+
577
+ } catch (IOException err) {
578
+
579
+ // 開発中は、例外を握りつぶさないこと
580
+
581
+ err.printStackTrace();
582
+
583
+ } finally {
584
+
585
+ // リソースの終了処理は finally句で実施する
586
+
587
+ if(br != null) {
588
+
589
+ try {
590
+
591
+ br.close();
592
+
593
+ } catch (IOException ex) {
594
+
595
+ // Do nothing
596
+
597
+ }
598
+
599
+ }
600
+
601
+ }
602
+
603
+ return list.toArray(new String[0]);
604
+
605
+
606
+
607
+ }
608
+
609
+ }
610
+
611
+
612
+
613
+ `````
614
+
615
+ `````JAVA
616
+
129
617
  package csvRead;
130
618
 
131
-
619
+ /*
620
+
132
-
621
+ * ファイル重複データ項目の表示
622
+
623
+ */
624
+
625
+
626
+
627
+ import java.util.ArrayList;
628
+
133
- import java.io.BufferedReader;
629
+ import java.util.HashSet;
134
-
630
+
135
- import java.io.File;
631
+ import java.util.List;
136
-
137
- import java.io.FileInputStream;
632
+
138
-
139
- import java.io.FileNotFoundException;
140
-
141
- import java.io.IOException;
142
-
143
- import java.io.InputStreamReader;
144
-
145
- import java.io.UnsupportedEncodingException;
146
-
147
- import java.util.regex.Pattern;
633
+ import java.util.Set;
148
-
149
-
150
-
634
+
635
+
636
+
151
- public class FieldChk01 {
637
+ public class FReadDistinct {
152
638
 
153
639
  //処理フラグ(0なら正常:1以上なら異常)
154
640
 
155
- int flg = 0;
641
+ int flg2 = 0;
156
-
157
-
158
-
642
+
643
+
644
+
159
- // public static void main(String[] args) {
645
+ //public static void main(String[] args) {
160
646
 
161
647
  // クラス化
162
648
 
163
649
  public void method() {
164
650
 
165
- // ここにコードを挿入
166
-
167
-
168
-
169
- try {
170
-
171
-
172
-
173
- // ファイルのパスを指定してオブジェクトを生成。
174
-
175
- File file = new File("C:\\sample.csv");
176
-
177
-
178
-
179
- // 入力ストリームを生成。( FileNotFoundException が発生 )
180
-
181
- FileInputStream input = new FileInputStream(file);
182
-
183
- /* 入力ストリームの読み込み。 ( UnsupportedEncodingException が発生 )
184
-
185
- * ここでCSVファイルの文字コードを設定しないと文字化けします。 */
186
-
187
- // 読み込むファイルの文字コード(SJIS)
188
-
189
- InputStreamReader stream = new InputStreamReader(input, "SJIS");
190
-
191
- // バッファに取り込み。
192
-
193
-
194
-
195
- BufferedReader buffer = new BufferedReader(stream);
196
-
197
-
198
-
199
- //変数定義
200
-
201
- //読み込み行
202
-
203
- String line;
204
-
205
- //読み込み件数
206
-
207
- int count = 0;
208
-
209
- //配列数
210
-
211
- //int len1 = 0;
212
-
213
-
214
-
215
- /* readLine()でバッファの1行を取作業を、読み込める行が無くなるまでwhile文で実行。
216
-
217
- * line = buffer.readline() でBufferedReaderが保持する一行を取出しているので、ループする毎に書き変わります。 */
218
-
219
- while((line = buffer.readLine()) != null) {
220
-
221
- // 取出した1行の文字セットを変換して新たに文字列を生成。
222
-
223
- byte[] b = line.getBytes();
224
-
225
- // String で UnsupportedEncodingException が発生 (変換したい文字コード:UTF-8)
226
-
227
- line = new String(b, "UTF-8");
228
-
229
- // 文字列をカンマ区切りで配列に分けて要素ごとに出力。
230
-
231
- // line.splitの第2引数に"-1"を指定しないと、他の行と要素数が
232
-
233
- // 違うため、出力結果の様にはなりません。
234
-
235
- String[] columns = line.split(",", -1);
236
-
237
-
238
-
239
- // 読み込み行数カウント
240
-
241
- count++;
242
-
243
- //配列数定義
244
-
245
- //len1 = columns.length;
246
-
247
- //System.out.println(len1);
248
-
249
-
250
-
251
- Pattern p1 = Pattern.compile("^[0-9]+$"); // 番号
252
-
253
- Pattern p2 = Pattern.compile("^[0-9]{3}-[0-9]{4}-[0-9]{4}$"); // 電話番号
254
-
255
- // 数字が含まれていればOK(社員番号)
256
-
257
- Pattern p3 = Pattern.compile("^[0-9a-zA-Z]+$"); //社員番号(英数字文字のみが1文字以上)
258
-
259
- Pattern p4 = Pattern.compile("^[^\\d]+$"); // 簡単な正規表現(単純に数字が含まれていないというのを確認)
260
-
261
-
262
-
263
- for(int j = 0; j < columns.length; j++) {
264
-
265
- //for(int j = 0; j < 4; j++) {
266
-
267
- //System.out.println(j + " : " + columns[j]);
268
-
269
-
270
-
271
- //データ型チェック開始
272
-
273
- if(j == 0 && p3.matcher(columns[j]).matches() == false) {
274
-
275
- System.out.println(count + "行目の" + "【1列目】入力規則違反。【入力値: " + columns[j] + "】");
276
-
277
- flg++;
278
-
279
- } else if(j == 1 && p4.matcher(columns[j]).matches() == false) {
280
-
281
- //if(j == 1 && p4.matcher(columns[j]).matches() == false) {
282
-
283
- System.out.println(count + "行目の" + "【2列目】入力規則違反。【入力値: " + columns[j] + "】");
284
-
285
- flg++;
286
-
287
- } else if(j == 2 && p1.matcher(columns[j]).matches() == false) {
288
-
289
- System.out.println(count + "行目の" + "【3列目】入力規則違反。【入力値: " + columns[j] + "】");
290
-
291
- flg++;
292
-
293
- } else if(j == 3 && p2.matcher(columns[j]).matches() == false) {
294
-
295
- System.out.println(count + "行目の" + "【4列目】入力規則違反。【入力値: " + columns[j] + "】");
296
-
297
- flg++;
298
-
299
- }
300
-
301
-
302
-
303
- //データ型チェック終了
304
-
305
- }
651
+
652
+
653
+ String[] csv = FRead.getLines("C:\\sample.csv");
654
+
655
+
656
+
657
+ List<String> result1 = new ArrayList<String>();
658
+
659
+ List<String> result2 = new ArrayList<String>();
660
+
661
+ List<String> result3 = new ArrayList<String>();
662
+
663
+ List<String> result4 = new ArrayList<String>();
664
+
665
+
666
+
667
+ for(String line : csv) {
668
+
669
+ result1.add(line.split(",")[0]);
670
+
671
+ result2.add(line.split(",")[1]);
672
+
673
+ result3.add(line.split(",")[2]);
674
+
675
+ result4.add(line.split(",")[3]);
676
+
677
+ }
678
+
679
+
680
+
681
+ // 重複チェックオブジェクト
682
+
683
+ Set<String> set1 = new HashSet<String>();
684
+
685
+ Set<String> set2 = new HashSet<String>();
686
+
687
+ Set<String> set3 = new HashSet<String>();
688
+
689
+ Set<String> set4 = new HashSet<String>();
690
+
691
+
692
+
693
+ //社員番号列(A列)
694
+
695
+ for(String user1 : result1) {
696
+
697
+ //setに追加してみて、追加できなかった(重複していた)場合
698
+
699
+ if(!set1.add(user1)) {
700
+
701
+ System.out.println("【社員番号】に重複データがあ。値:" + user1);
702
+
703
+ flg2++;
306
704
 
307
705
 
308
706
 
309
707
  }
310
708
 
311
-
709
+ }
710
+
711
+
712
+
312
-
713
+ //社員名列(B列)
714
+
313
-
715
+ for(String user2 : result2) {
314
-
716
+
315
- //いたストリームとバッファを閉じて関連するシステム・リソースを解放します。 ( IOException が発生 )
717
+ //setに追加してみて、追加できなかった(重複していた)場合
316
-
718
+
317
- input.close();
719
+ if(!set2.add(user2)) {
318
-
319
- stream.close();
720
+
320
-
321
- buffer.close();
322
-
323
-
324
-
325
- } catch (UnsupportedEncodingException | FileNotFoundException e) {
721
+ System.out.println("【社員名】に重複データがあります。値:" + user2);
722
+
326
-
723
+ flg2++;
724
+
725
+
726
+
727
+ }
728
+
729
+ }
730
+
731
+
732
+
327
- e.printStackTrace();
733
+ //内線番号列(C列)
328
-
329
-
330
-
734
+
331
- } catch (IOException e) {
735
+ for(String user3 : result3) {
736
+
332
-
737
+ //setに追加してみて、追加できなかった(重複していた)場合
738
+
333
- e.printStackTrace();
739
+ if(!set3.add(user3)) {
740
+
334
-
741
+ System.out.println("【番号】に重複データがあります。値:" + user3);
742
+
335
-
743
+ flg2++;
744
+
745
+
746
+
747
+ }
748
+
749
+ }
750
+
751
+
752
+
753
+ //電話番号列(D列)
754
+
755
+ for(String user4 : result4) {
756
+
757
+ //setに追加してみて、追加できなかった(重複していた)場合
758
+
759
+ if(!set4.add(user4)) {
760
+
761
+ System.out.println("【電話番号】に重複データがあります。値:" + user4);
762
+
763
+ flg2++;
764
+
765
+
766
+
767
+ }
336
768
 
337
769
  }
338
770
 
@@ -345,3 +777,5 @@
345
777
  }
346
778
 
347
779
  ```
780
+
781
+ 宜しくお願いします。