0
javaのマッチングについて
javaのマッチングについて教えてください。
今までcobolのマッチング処理しか組んだ事がなかった為
javaで組んでは見たもののcobolチックなってしまいました。
ソースは以下の通りです。
二つのキーを段階的に比較して処理を行っています。
質問1:片方のファイルの読み込みが終了した場合、cobolではキー部分にHIGH-VALUEを設定するのが普通ですが、JAVAではどうするんでしょうか?
質問2:ファイルの読み込みは、BufferedReaderクラスのreadLine()メソッドを使用し一レコードずつ読み込んでます。
書き込みには、BufferedWriterクラスのwrite()メソッド。改行用としてnewLine()メソッドを使用していますが、これって一般的なファイルの入出力方法でしょうか?
質問3:cobolのように処理を上からつらつら記述してしまいましたが、オブジェクト指向的な観点から見て、メソッド分割等。
java的なソースにするにはどのように改良したらよいでしょうか?
import java.io.*;
public class MatchTest {
//変数定義
static final String filename1 = "test1.txt";
static final String filename2 = "test2.txt";
static final String filename3 = "test3.txt";
public static void main(String[] args) {
try{
//インスタンス生成
FileReader file1 = new FileReader(filename1);
FileReader file2 = new FileReader(filename2);
FileWriter file3 = new FileWriter(filename3);
BufferedReader br1 = new BufferedReader(file1);
BufferedReader br2 = new BufferedReader(file2);
BufferedWriter bw = new BufferedWriter(file3);
//ヘッダレコード作成
bw.write("header");
System.out.println("header");
bw.newLine();
//データレコード作成変数初期化
String ftr1SbtCd = null;
String ftr2SbtCd = null;
String ftr1LogInID = null;
String ftr2LogInID = null;
String ftr1Sonota = null;
String ftr2Sonota = null;
//一件READ
String f1r = br1.readLine();
String f2r = br2.readLine();
//マッチング処理: ファイル1(前日)、ファイル2(当日)が共にEOFになるまで処理を行う。
while (!(f1r ==null && f2r ==null)) {
//比較項目取得
if(f1r==null){
//ファイル1読み込み終了時、キーにhigh-valueを設定
ftr1SbtCd = "zzz";
ftr1LogInID = "999";
ftr2SbtCd = f2r.substring(3,6);
ftr2LogInID = f2r.substring(6,9);
}else if(f2r==null){
//ファイル2読み込み終了時、キーにhigh-valueを設定
ftr2SbtCd = "zzz";
ftr2LogInID = "999";
ftr1SbtCd = f1r.substring(3,6);
ftr1LogInID = f1r.substring(6,9);
}else{
//本人識別ID取得
ftr1SbtCd = f1r.substring(3,6);
ftr2SbtCd = f2r.substring(3,6);
//業務ログインID取得
ftr1LogInID = f1r.substring(6,9);
ftr2LogInID = f2r.substring(6,9);
//その他項目取得
ftr1Sonota = f1r.substring(0,3) + f1r.substring(9,14);
ftr2Sonota = f2r.substring(0,3) + f2r.substring(9,14);
}
//比較(本人識別ID)
int matchRs = ftr1SbtCd.compareTo(ftr2SbtCd);
if (matchRs < 0) {
System.out.println("削除:" + ftr1SbtCd + ftr1LogInID);
bw.write("削除:" + ftr1SbtCd + ftr1LogInID);
bw.newLine();
f1r = br1.readLine();
} else if (matchRs > 0) {
System.out.println("追加:" + ftr2SbtCd + ftr2LogInID);
bw.write("追加:" + ftr2SbtCd + ftr2LogInID);
bw.newLine();
f2r = br2.readLine();
} else {
//比較(業務ログインID)
matchRs = ftr1LogInID.compareTo(ftr2LogInID);
if (matchRs < 0) {
System.out.println("削除:" + ftr1SbtCd + ftr1LogInID);
bw.write("削除:" + ftr1SbtCd + ftr1LogInID);
bw.newLine();
f1r = br1.readLine();
} else if (matchRs > 0) {
System.out.println("追加:" + ftr2SbtCd + ftr2LogInID);
bw.write("追加:" + ftr2SbtCd + ftr2LogInID);
bw.newLine();
f2r = br2.readLine();
} else {
//比較(その他項目)
if(ftr1Sonota.equals(ftr2Sonota)){
System.out.println("一致:" + ftr1SbtCd + ftr1LogInID);
}else{
System.out.println("更新:" + ftr2SbtCd + ftr2LogInID + ftr2Sonota);
bw.write("更新:" + ftr2SbtCd + ftr2LogInID + ftr2Sonota);
bw.newLine();
}
f1r = br1.readLine();
f2r = br2.readLine();
}
}
}
//トレーラレコード作成
bw.write("traler");
System.out.println("traler");
bw.newLine();
//ファイル出力
bw.flush();
br1.close();
br2.close();
bw.close();
}catch(Exception e){
System.out.println("エラーだよ");
}
}
}