0

識別子に基づいて読み取り、それをグループ化し、多数のテキスト ファイルを作成する必要があるテキスト ファイルがあります。以前のプロジェクトで RandomAccessFile、Filereader を使用しましたが、以下の要件を達成するには手がかりが必要です。一般的な詳細に基づいてレコードの行をグループ化するロジックが得られれば、コードを書くことができます。

担保.txt

General Details|S|!|!|66T4049|N|
Charge Details|S|!|!|66T4049| 3825|
Charge Details|S|!|!|66T4049| 3826|
Machinery Details|S|!|!|66T4049|N|
General Details|S|!|!|66T4050|N|
Immovable Property Details|S|!|!|66T4050|N|
US_CIPD|66T4050|N|S156284|02-01-2013 00:58:50|
General Details|S|!|!|66T4050|N|IMUSD|I||| | |
Immovable Property Details|S|!|!|66T4050|N|IMUSD|
US locale Immovable Property Details|66T4050|N|
General Details|S|!|!|66T4051|N|MACH|M||| | |
General Details|S|!|!|66T4051|N|MACH|M||| | |
Charge Details|S|!|!|66T4051| 3827|N|        
Charge Details|S|!|!|66T4051| 3828|N| 
Insurance Details|S|!|!|66T4051|   1|Y|
Insurance Details|S|!|!|66T4051|   2|Y|
Inspection Details|S|!|!|66T4051| 1846|N|
Inspection Details|S|!|!|66T4051| 1845|N|
Ownership and Tenancy Details|66T4051|  329|0
Ownership and Tenancy Details|66T4051|  328|0

機械の詳細|S|!|!|66T4051|N|MACH|123|55| 追加資料の詳細|66T4051|N|01|__14P|

General Details は親キーです。一般的な詳細の下に、状態料金の詳細に基づいて、機械の詳細、保険の詳細、およびその他の詳細が含まれます。

1 つの一般的な詳細セクションをグループ化し、新しいファイルを作成する必要があります。まあ言ってみれば。

Collateral1.txt
General Details|S|!|!|66T4049|N|
Charge Details|S|!|!|66T4049| 3825|
Charge Details|S|!|!|66T4049| 3826|
Machinery Details|S|!|!|66T4049|N|


Collateral2.txt
General Details|S|!|!|66T4050|N|
Immovable Property Details|S|!|!|66T4050|N|
US_CIPD|66T4050|N|S156284|02-01-2013 00:58:50|


Collateral3.txt
General Details|S|!|!|66T4050|N|IMUSD|I||| | |
Immovable Property Details|S|!|!|66T4050|N|IMUSD|
US locale Immovable Property Details|66T4050|N|


Collateral4.txt
General Details|S|!|!|66T4051|N|MACH|M||| | |

等々...

必要なファイルリーダーと、ロジックを実装する方法を教えてください。区切り文字は各列のパイプになり、区切り文字は各行の終了行になります。

4

2 に答える 2

1

これを行うための1つのアイデアは次のとおりです。

1)ソースファイルを1行ずつ読み取ります。
2)この行からキーを抽出します
。3)マップを使用して、キー(上記で抽出)と値をこのキーのファイルへの参照として保存します。
4)マップでキーを検索し、
一致するものが見つかった場合はファイル参照を取得して、このファイルに上記の行を追加します。
それ以外の場合は、新しいファイルを作成し、この行をこの新しく作成されたファイルに追加し、キーとこのファイル参照を次の使用のためにマップに配置します。
5)ファイルの最後に到達するまで上記を続けます。
6)作成されたすべてのファイルを閉じます

お役に立てれば !!

于 2013-02-21T07:06:29.857 に答える
0

さて、特定の文字列で始まる行が表示されたら、新しいファイルを開始する必要があるようです。簡単そうですね。

String prefix = "GeneralDetails|"; // Or whatever you want it to be
BufferedReader reader = new BufferedReader(new InputStreamReader(
    new FileInputStream("input.txt"), "UTF-8")); // Specify the charset here
try {
    int outputIndex = 0;
    BufferedWriter writer = null;
    try {
        String line;
        while ((line = reader.readLine() != null) {
            // Check whether we need to start a new file, closing the old one.
            if (writer == null || line.startsWith(prefix)) {
                if (writer != null) {
                    writer.close();
                }
                outputIndex++;
                string path = "Collateral " + outputIndex + ".txt";
                // Specify the output encoding here
                writer = new BufferedWriter(new OutputStreamWriter(
                    new FileOutputStream(path), "UTF-8")); 
            }
            writer.write(line);
            writer.newLine();
        } else {
        }
    } finally {
        if (writer != null) {
            writer.close();
        }
    }
} finally {
    reader.close();
}
于 2013-02-21T07:22:51.733 に答える