私は2つのファイルを比較するためにこのプログラムを書いています。彼らは500メガバイト〜2.8ギガバイトのサイズで、6時間ごとに作成されます。私は2つのソース(NMDとXMP)から2つのファイルを持っています。それらは、パイプ(|)文字で区切られたフィールドを持つテキスト行に分割されます。各行は単一のレコードで、最大65,000文字まで可能です。このデータは、テレビ番組や映画に関するもので、時間と説明的な内容を示しています。私は、特定のショーや映画には、そのショーや映画を一意に識別するデータが最低3つあると判断しました。 IE:CallSign、ProgramId、StartLong。このデータの2つのソースは、NMDとXMPと呼ばれるシステムで、さまざまな変数に頭字語が追加されています。ですから、私の目標は、NMDによって作成されたファイルとXMPで作成されたファイルを比較し、NMDが生成するすべてがXMPによって生成され、一致する各レコードのデータが同じであることを確認することです。私のプログラムはファイルの最初のレコードだけを読み込むのはなぜですか?
私がここで達成しようとしていることは次のとおりです。 1. 3つの一意のデータフィールドのレコードでNMDファイルレコードを読み取ります。 2.レコードごとにXMPファイルレコードを読み取り、NMDファイル内の現在のレコードと一致するレコードを探します。 3. NMDファイルは一度に1つのレコードを反復する必要があります。各NMDレコードは、XMDファイル全体で検索され、同じレコードのレコードごとにレコードされます。 4.成功または失敗を示す2つのファイルのいずれかにログエントリを書き込み、そのデータは何であったか。
それぞれのファイルの最初のレコードが読み取られますが、それ以降のレコードは読み取られません。結果として、どちらのファイルの終わりにも到達せず、一致が見つからない。私のsuccess.logファイルとfailure.logファイルは決してそれらのデータを表示しません。外側のdo/whileループでは、System.outは1行のテキストを表示します。 IE:ファイルの最初のレコード。内側のdo/whileループでは、System.outはファイル内の最初のレコードから何度も何度も同じデータを繰り返し出力します。このプログラムは、2つのソースファイルを通してレコードごとにレコードを反復しないという証拠ではありませんか?実際のコードへ
そう
...import java.io.*;
public class FileParse {
public static void main(String[] args) throws java.io.IOException {
String epgsRecordNMD = null;
String epgsRecordXMP = null;
BufferedWriter logSuccessWriter = null;
BufferedWriter logFailureWriter = null;
BufferedReader readXMP = null;
BufferedReader readNMD = null;
readNMD = new BufferedReader(new FileReader("d:testdataNMD.txt"));
do {
epgsRecordNMD = readNMD.readLine();
String[] epgsSplitNMD = epgsRecordNMD.split("\\|");
String epgsCallSignNMD = epgsSplitNMD[0];
String epgsProgramIdNMD = epgsSplitNMD[2];
String epgsStartLongNMD = epgsSplitNMD[9];
System.out.println("epgsCallsignNMD: " + epgsCallSignNMD + " epgsProgramIdNMD: " + epgsProgramIdNMD + " epgsStartLongNMD: " + epgsStartLongNMD);
do {
readXMP = new BufferedReader(new FileReader("d:testdataXMP.txt"));
epgsRecordXMP = readXMP.readLine();
String[] epgsSplitXMP = epgsRecordXMP.split("\\|");
String epgsCallSignXMP = epgsSplitXMP[0];
String epgsProgramIdXMP = epgsSplitXMP[2];
String epgsStartLongXMP = epgsSplitXMP[9];
System.out.println("epgsCallsignXMP: " + epgsCallSignXMP + " epgsProgramIdXMP: " + epgsProgramIdXMP + " epgsStartLongXMP: " + epgsStartLongXMP);
if (epgsCallSignXMP.equals(epgsCallSignNMD) && epgsProgramIdXMP.equals(epgsProgramIdNMD) && epgsStartLongXMP.equals(epgsStartLongNMD)) {
logSuccessWriter = new BufferedWriter (new FileWriter("d:success.log", true));
logSuccessWriter.write("NMD match found in XMP" + "epgsCallsignNMD: " + epgsCallSignNMD + " epgsProgramIdNMD: " + epgsProgramIdNMD + " epgsStartLongNMD: " + epgsStartLongNMD);
logSuccessWriter.write("\n");
logSuccessWriter.close();
System.out.println ("Match found");
}
} while (epgsRecordXMP != null);
logFailureWriter = new BufferedWriter (new FileWriter("d:failure.log", true));
logFailureWriter.write("NMD match not found in XMP" + "epgsCallsignNMD: " + epgsCallSignNMD + " epgsProgramIdNMD: " + epgsProgramIdNMD + " epgsStartLongNMD: " + epgsStartLongNMD);
logFailureWriter.write("\n");
logFailureWriter.close();
System.out.println ("Match NOT found");
} while (epgsRecordNMD != null);
readNMD.close();
readXMP.close();
}
}
私はただ今問題があったことに気付きました。私の2番目のdo/whileループの中に私はこのコマンドを持っています:readXMP = new BufferedReader(新しいFileReader( "d:testdataXMP.txt"));これにより、testdataXMP.txtファイルが何度も繰り返し開くため、レコードは反復されません。この行をreadNMD行のすぐ下に移動しました。 – JavaNoob
これは無料のデバッグサービスではありません。 – Raedwald
[デバッガとは何ですか?また、どのようにして問題を診断するのに役立ちますか?](https://stackoverflow.com/questions/25385173/what-is-a-debugger-and-how-can-it-help-私が診断した問題) – Raedwald