CSVファイル内容
社員番号(ABC1582),社員名(漢字), 任意番号(124566),携帯番号(xxx-xxxx-xxxx)
配列にデータをセットして、重複している項目を表示させたく思います。
重複チェックで引っかかったものを例えば、「2行目と29行目の社員番号(値)が重複しています」と表示させたく思います。全ての列(A~D列)でチェックをしたく思います。
どのようにしたらいいでしょうか。
下記に途中まで作成したコードを記載します。
宜しくお願い致します。
JAVA
1package ren01; 2 3import java.io.BufferedReader; 4import java.io.File; 5import java.io.FileInputStream; 6import java.io.FileNotFoundException; 7import java.io.IOException; 8import java.io.InputStreamReader; 9import java.io.UnsupportedEncodingException; 10import java.util.regex.Pattern; 11 12public class read3 { 13 14 public static void main(String[] args) { 15 // ここにコードを挿入 16 17 try { 18 19 String path = new File(".").getAbsoluteFile().getParent(); 20 //System.out.println(path + "\\sample.csv"); 21 String path2 = (path + "\\sample.csv"); 22 //System.out.println(path2); 23 24 // ファイルのパスを指定してオブジェクトを生成。 25 //File file = new File("C:\\ws01\\ren01\\src\\ren01\\sample.csv"); 26 File file = new File(path2); 27 28 // 入力ストリームを生成。( FileNotFoundException が発生 ) 29 FileInputStream input = new FileInputStream(file); 30 /* 入力ストリームの読み込み。 ( UnsupportedEncodingException が発生 ) 31 * ここでCSVファイルの文字コードを設定しないと文字化けします。 */ 32 // 読み込むファイルの文字コード(SJIS) 33 InputStreamReader stream = new InputStreamReader(input, "SJIS"); 34 // バッファに取り込み。 35 36 BufferedReader buffer = new BufferedReader(stream); 37 38 String line; 39 int count = 0; 40 41 /* readLine()でバッファの1行を取り出す作業を、読み込める行が無くなるまでwhile文で実行。 42 * line = buffer.readline() でBufferedReaderが保持する一行を取出しているので、ループする毎に書き変わります。 */ 43 while((line = buffer.readLine()) != null) { 44 // 取出した1行の文字セットを変換して新たに文字列を生成。 45 byte[] b = line.getBytes(); 46 // String で UnsupportedEncodingException が発生 (変換したい文字コード:UTF-8) 47 line = new String(b, "UTF-8"); 48 // 文字列をカンマ区切りで配列に分けて要素ごとに出力。 49 // line.splitの第2引数に"-1"を指定しないと、他の行と要素数が 50 // 違うため、出力結果の様にはなりません。 51 String[] columns = line.split(",", -1); 52 53 // 読み込み行数カウント 54 count++; 55 56 Pattern p1 = Pattern.compile("^[0-9]+$"); // 内線番号 57 Pattern p2 = Pattern.compile("^[0-9]{3}-[0-9]{4}-[0-9]{4}$"); // 携帯番号 58 //Pattern p3 = Pattern.compile("^[a-zA-Z]{3}[0-9]{4}$"); //社員番号(英数字) 59 // 数字が含まれていればOK(社員番号) 60 //Pattern p3 = Pattern.compile("^[^0-9]*$"); //社員番号(英数字) 61 Pattern p4 = Pattern.compile("^[^\\d]+$"); // 簡単な正規表現(単純に数字が含まれていないというのを確認) 62 63 for(int j = 0; j < columns.length; j++) { 64 // System.out.println(j + " : " + columns[j]); 65 66 //データ型チェック開始 67 //if(j == 0 && p3.matcher(columns[j]).matches() == false) { 68 // System.out.println(count + "行目の" + "(A列)がおかしい: " + columns[j]); 69 //} else if(j == 1 && p4.matcher(columns[j]).matches() == false) { 70 if(j == 1 && p4.matcher(columns[j]).matches() == false) { 71 System.out.println(count + "行目の" + "(B列)がおかしい: " + columns[j]); 72 } else if(j == 2 && p1.matcher(columns[j]).matches() == false) { 73 System.out.println(count + "行目の" + "(C列)がおかしい: " + columns[j]); 74 } else if(j == 3 && p2.matcher(columns[j]).matches() == false) { 75 System.out.println(count + "行目の" + "(D列)がおかしい: " + columns[j]); 76 } 77 //データ型チェック終了 78 79 } 80 81 //System.out.println(""); 82 83 } 84 85 // 開いたストリームとバッファを閉じて関連するシステム・リソースを解放します。 ( IOException が発生 ) 86 input.close(); 87 stream.close(); 88 buffer.close(); 89 90 } catch (UnsupportedEncodingException | FileNotFoundException e) { 91 e.printStackTrace(); 92 93 } catch (IOException e) { 94 e.printStackTrace(); 95 96 } 97 98 } 99} 100
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/16 04:30
2016/06/16 04:45
2016/06/16 06:19
2016/06/16 06:21