0

私はJavaが初めてで、Cで何年もの経験があります。助けていただければ幸いです。

10 進ファイルがあり、ヘッダーを見つけてそこからデータを選択し、再度ヘッダーを探す必要があります。私のファイルが次のようになっているとしましょう:

480 124 125 001 047 001 047 001 480 001 001 001 001 001 001 001 001 001 001 001 001 047 001 480 002 002 002 002 002 002 002 002

私のヘッダーは次のとおりです。

001 047 001 480

ヘッダーは、「ヘッダー」と呼ばれる int 配列に格納されます。

私は複数の方法を試しました-コード:

Integer i1 = new Integer(this.header[0]);
Integer i2 = new Integer(this.header[1]);
Integer i3 = new Integer(this.header[2]);
Integer i4 = new Integer(this.header[3]);

nextDec.hasNext(i1.toString() + i2.toString() + i3.toString() + i4.toString());

true を期待していますが、false を返します。ファイル内のヘッダー番号の先頭のゼロを削除しても false を返します (実際には削除できません)。

コード:

nextDec.findInLine(i1.toString() + " " + i2.toString() + " " + i3.toString() + " "
                + i4.toString());

ヘッダーを返すことを期待していますが、null を返します。ファイル内のヘッダー番号の先頭のゼロを削除すると、ヘッダーが返されます。hasNext メソッドで機能しなかったのはなぜですか?

コード:

nextDec.findInLine(Arrays.toString(header));

出力がまったくないのはなぜですか? 先行ゼロでヘッダーを検出し、データを取得して再検索するにはどうすればよいですか? ヘッダーが見つかった場所 (インデックス) を見つけることは可能ですか?

ありがとうございました

私はより明確にしようとします。モニターソフトを使ってストリーミングデータをPCに記録しています。データは 10 進数形式でファイルに記録され、先行ゼロ (3 桁の数字を持つため) と数字の間にスペースが入ります。ファイルには複数のバッファが含まれています。データ バッファーは 4 バイトのヘッダーで始まります。ファイル内でヘッダーを見つけて、グラフに表示される適切な変数に続くデータを収集する必要があります。ヘッダーが見つかった後に読み取りたいデータの種類に応じて、nextInt、nextFloat を使用することを考えていました。

ありがとうございました

4

1 に答える 1

0

考えられる解決策は、ヘッダーを区切り文字として使用してから、入力をスキャンすることです。ただし、スキャナーを使用するのではなく、手動で行う方がよいと思います。

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        String s = "480 124 125 001 047 001 047 001 480 001 001 001 001 001 001 001 001 001 001 001 001 047 001 480 002 002 002 002 002 002 002 002\n";

        int header[] = new int[] {1, 47, 1, 480};
        String stringHeader = "";
        for (int e : header) {
            stringHeader += String.format("%03d ", e);
        }
        Scanner scanner = new Scanner(s);
        scanner.useDelimiter(stringHeader);

        // Skipping everything before first header
        scanner.skip(".*?"+stringHeader);

        // Now we get data between headers
        while(scanner.hasNext()) {
            System.out.println(   scanner.next()   );
        }

    }
}

出力 (最初と 2 番目のヘッダーの後の 2 つのトークン):

001 001 001 001 001 001 001 001 001 001 001 
002 002 002 002 002 002 002 002

手に入れたいものですか?

于 2013-10-06T15:03:12.843 に答える