Pregunta

Tengo un archivo que tiene tanto de texto ASCII y binario contenido.Me gustaría extraer el texto sin tener que analizar el contenido binario como el contenido binario es de 180 MB.Puedo simplemente extraer el texto para su posterior manipulación ...¿cuál sería la mejor manera de ir sobre él.

El ASCII es en el principio del archivo.

¿Fue útil?

Solución

Hay 4 bibliotecas para leer archivos FITS en Java aquí :

  

Java

     clases

nom.tam.fits

     

Una de Java FITS biblioteca ha sido desarrollado que proporciona eficiente - al menos para Java - I / O para FITS imágenes y tablas binarias. Las bibliotecas de Java soportan todos los formatos FITS básica y archivos comprimidos gzip. Apoyo al acceso a subconjuntos de datos está incluido y la convención JERARCA se puede utilizar.

     

eap.fits

     

Incluye un applet y aplicación para la visualización y edición de archivos FITS. También incluye un paquete de propósito general para la lectura y escritura de datos FITS. Se puede leer archivos con cifrado PGP si el archivo jar PGP opcional está disponible.

     

jfits

     

Los soportes jfits biblioteca FITS imágenes y tablas ASCII y binarios. En línea se soporta la modificación de las palabras clave y datos.

     

STIL

     

A java mesa de propósito general I pura biblioteca de E / S que puede leer y escribir FITS mesas binarias entre otros formatos de tabla. Es eficiente y rápida puede proporcionar acceso de lectura secuencial o aleatorio para FITS tablas mucho más grandes que la memoria física. No hay soporte para imágenes FITS.

Otros consejos

No estoy al tanto de cualquier clases Java que van a leer los caracteres ASCII e ignorar el resto, pero la cosa más fácil que puedo llegar a aquí es utilizar la utilidad strings (suponiendo que usted está en un sistema basado en Unix).

  

SINOPSIS          cuerdas [-] [-a] [-o] [formato -t] [-número] [-n número]          [-] [archivo ...]

     

DESCRIPCIÓN          Cuerdas busca cadenas de caracteres ASCII en un archivo binario o estándar   entrada.          Cadenas es útil para identificar los archivos de objetos al azar y   Muchos otros          cosas. Una cadena es cualquier secuencia de 4 (el valor predeterminado) o más   impresión          personajes que terminan con un salto de línea o un nulo. A menos que el -   bandera es          dada, las cadenas se ve en todas las secciones de los archivos de objetos, excepto   el          sección (__TEXT, __ texto). Si no hay archivos se especifican entrada estándar   es          leer.

A continuación, puede canalizar la salida a otro archivo y hacer lo que quiera con él.

Editar con la información adicional que todo el ASCII viene al principio, sería un poco más fácil para extraer el texto mediante programación; Sin embargo, esto es más rápido que escribir código.

Suponiendo que se puede decir de donde el final de la ASCII contenido es, acabo de leer caracteres desde el archivo hasta encontrar el final de la misma, y cierre el archivo.

Suponiendo que hay alguna señal que divide el archivo en los componentes binarios y ASCII (por ejemplo, "# FIN #" en una línea por sí mismo), puede hacerlo sometihng como la siguiente:

import java.io.*;

// ...

public static void main(String args[]) {
  try {
    FileInputStream f = new FileInputStream("object.bin");
    DataInputStream d = new DataInputStream(f);
    BufferedReader b = new BufferedReader(new InputStreamReader(d));

    String s = "";
    while ((s = b.readLine()) != "#END#") {
      // ASCII contents parsed here.
      System.out.println(s);
    }

    d.close();
  } catch (Exception e) {
      System.err.println("kablammo! " + e.getMessage());
  }
}

Tener un método que comprueba si un carácter particular cumple con sus criterios (caracteres aquí, que he cubierto que se encuentran en el teclado). Una vez que llegue un personaje para el que el método devuelve false, sabes que has alcanzado el binario. Tenga en cuenta que los caracteres ASCII válidos también pueden formar parte de la binaria por lo que puede terminar con unos pocos caracteres adicionales al final.

static boolean isAsciiCharacter(char c) {
    return (c >= ' ' && c <= '~') ||
            c == '\n' ||
            c == '\r';
}

Los primeros 2880 bytes de un FITS archivo son cabecera ASCII datos, que representan 36 de 80 columnas "imágenes de las tarjetas". No hay personajes línea de terminación, solo una matriz 36x80 ASCII, rellenado con espacios en blanco si es necesario. Puede haber cabeceras 2880 bytes ASCII adicionales anteriores los datos binarios; habría que analizar el primer conjunto de cabeceras saber cuánto ASCII esperar.

Pero todo corazón adhiero consejos Oscar Reyes' para utilizar un paquete existente para decodificar archivos FITS! Dos de los paquetes que mencionó están alojados por el Centro de Vuelo Espacial Goddard de la NASA, que también son responsables de mantener el formato FITS. Eso es alrededor de una fuente tan definitivo como usted puede conseguir.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top