0

バイナリ ファイル (.dat) を読み取って、これらすべてを 2D 配列に保存しようとしています。行数はバイナリ ファイルの行数として定義され、列数は 9 として定義されます。そのため、バイナリ ファイルの行で -1 を検出し、2D 配列を埋められるようにしたいと考えています。それらの値をスキップします。現在、次のコードを使用していますが、バイナリ ファイルに負の行が複数ある場合でも、1 行しか削除されません。

RandomAccessFile Archivocopiadora = new RandomAccessFile("Archivos/CopiadorasAgregadas.dat", "rw");
cantRegistros = Archivocopiadora.length()/tamRegistro;
matrizcopiadorascargadas = new String[(int)cantRegistros][9];
contadorespaciosvacios = 0;
int registroenceros = 0;
String lecturacopiadoraa = "";

for(int registro = 0; registro < cantRegistros; registro++) {
    Archivocopiadora.seek(registro * tamRegistro + 88);
    int prueba = Archivocopiadora.readInt();

    if (prueba == -1) {
        contadorespaciosvacios++;
        stdOut.println(contadorespaciosvacios);
        List<String[]> l = new ArrayList<String[]>(Arrays.asList(matrizcopiadorascargadas));
        l.remove(registro);
        array2 = l.toArray(new String[l.size()][9]);
    } else {
        Archivocopiadora.seek(registro * tamRegistro);
        for (int ex = 0; ex < 40; ex++)
            lecturacopiadoraa = lecturacopiadoraa + Archivocopiadora.readChar();

        lecturacopiadoraa.trim();
        matrizcopiadorascargadas[registro][0] = lecturacopiadoraa;
        matrizcopiadorascargadas[registro][1] = Double.toString(Archivocopiadora.readDouble());
        matrizcopiadorascargadas[registro][2] = Integer.toString(Archivocopiadora.readInt());
        matrizcopiadorascargadas[registro][3] = Integer.toString(Archivocopiadora.readInt());
        matrizcopiadorascargadas[registro][4] = Integer.toString(Archivocopiadora.readInt());
        matrizcopiadorascargadas[registro][5] = Double.toString(Archivocopiadora.readDouble());
        matrizcopiadorascargadas[registro][6] = Double.toString(Archivocopiadora.readDouble());
        matrizcopiadorascargadas[registro][7] = Double.toString(Archivocopiadora.readDouble());
        matrizcopiadorascargadas[registro][8] = Double.toString(Archivocopiadora.readDouble());
        lecturacopiadoraa = "";
    }
}
4

1 に答える 1

0

行を「削除」する場合は、文字列配列の新しいリストを作成し、そこから目的の行を削除して、それを配列に変換します。この配列は、array2に割り当てられます。これはどこにも宣言されていません。特に、matrizcopiadorascargadasには何もしていないようです。

于 2012-08-26T23:04:21.660 に答える