tokenizer.h
Go to the documentation of this file.
00001 #ifndef __TOKENIZER_H_
00002 #define __TOKENIZER_H_
00003 
00004 
00005  // 1 MB de buffer y tenemos 2 buffers
00006 #define TAM_BUFFER 1024 * 1024
00007 #define INICIO_BUFFER_2 TAM_BUFFER
00008 #define FIN_BUFFER1 TAM_BUFFER
00009 #define FIN_BUFFER2 2*TAM_BUFFER
00010 
00011 #define MAX_PALABRAS 800
00012 #define TAM_LINEA 10000
00013 
00014 #include <iostream>
00015 #include <fstream>
00016 #include <string>
00017 #include <cstring>
00018 using namespace std;
00019 
00020 class Token
00021 {
00022 private:
00023     ifstream fichero; // Fichero desde el cual leeremos las lineas
00024 
00025     char buffer[2 * TAM_BUFFER]; // Es como 2 buffers de 1 MB
00026     int cuantosBuffer1, cuantosBuffer2; // cantidad de datos que hay en
00027                                         // cada buffer
00028     int indice; // indice del buffer (posicion en el fichero +/-)
00029     bool ficheroLeido; // Si ya esta leido todo el fichero y metido en los
00030                        // buffers
00031     bool finFich; // Ya esta todo el fichero leido y hemos vaciado los buffers
00032 
00033     char linea[TAM_LINEA]; // ultima linea leida del ficheo
00034 
00035     bool tokenizado; // indica si la ultima linea leida ha sido tokenizada
00036 
00037     char auxLinea[TAM_LINEA]; // copia de linea que se utiliza para obtener los
00038                                   // tokens o palabras de la linea
00039 
00040     int nPalabras; // nº de tokens encontrados en la linea tras la tokenizacion
00041 
00042     char * palabras[MAX_PALABRAS]; // tokens encontrados
00043 
00044 public:
00045     enum {ok = 0, eof = -1, noAbierto = -2, errorLectura = -3, malFormato = -4};
00046     char nomFichero[50];
00047     int estado;
00048 
00049     /* Constructor */
00050     Token ();
00051 
00052     /* Destructor */
00053     ~Token ();
00054 
00055     void destruyeToken();
00056 
00057     int abrirFichero(const char * f);
00058     /* Devuelve: Si exito => true
00059         Sino false
00060     */
00061 
00062     void cerrar(){
00063         if (fichero && fichero.is_open()) fichero.close();
00064     }
00065 
00066     inline void reposicionarFichero(int off = 0){
00067         //fichero.seekg (off, ios::beg);
00068         indice = off;
00069     }
00070 
00071     inline int getOffset(){
00072         //return fichero.tellg();
00073         return indice;
00074     }
00075 
00076     int leeLinea();
00077     /* Descripcion: lee una línea del fichero de texto
00078        Devuelve: Si exito => ok
00079                  Si fin de fichero => eof
00080                  Si fichero no abierto => noAbierto
00081     */
00082 
00083 
00084     int lee(int ncampos, char * palInicial = NULL);
00085     /* Descripcion: lee una linea cumpliendo un cierto formato
00086        Devuelve: ok si todo va bien
00087                  eof si fin de fichero
00088                  malFormato si se ha leido bien la linea pero
00089                             no cumple con el formato
00090     */
00091 
00092     int tokenizar(const char * s);
00093     /* Descripcion: obtiene los tokens de la linea leida
00094                     para separar los tokens se utiliza la cadena s,
00095                     si un caracter de esta cadena coincide con alguno
00096                     de la linea entonces eso es un fin de token
00097        Devuelve: el nº de tokens encontrados
00098     */
00099 
00100     /* token (n) permite obtener el token que ocupa la posicion n
00101        en la línea */
00102     char * token(int n);
00103     /* Descripcion: obtiene el token n-esimo de la linea leida, en caso
00104                     de que no exista => NULL
00105     */
00106 
00107     int getnPalabras(){
00108         return nPalabras;
00109     }
00110     /* Descripcion: obtiene el nº de tokes de la ultima linea tokenizada */
00111 
00112     inline char * getLinea(){
00113         return (linea);
00114     }
00115     /* Descripcion: obtiene la ultima linea leida */
00116 
00117     inline bool finFichero(){
00118         return (finFich);
00119     }
00120 };
00121 
00122 #endif


re_vision
Author(s): Dorian Galvez-Lopez
autogenerated on Sun Jan 5 2014 11:33:08