Go to the documentation of this file.00001 #ifndef __TOKENIZER_H_
00002 #define __TOKENIZER_H_
00003
00004
00005
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;
00024
00025 char buffer[2 * TAM_BUFFER];
00026 int cuantosBuffer1, cuantosBuffer2;
00027
00028 int indice;
00029 bool ficheroLeido;
00030
00031 bool finFich;
00032
00033 char linea[TAM_LINEA];
00034
00035 bool tokenizado;
00036
00037 char auxLinea[TAM_LINEA];
00038
00039
00040 int nPalabras;
00041
00042 char * palabras[MAX_PALABRAS];
00043
00044 public:
00045 enum {ok = 0, eof = -1, noAbierto = -2, errorLectura = -3, malFormato = -4};
00046 char nomFichero[50];
00047 int estado;
00048
00049
00050 Token ();
00051
00052
00053 ~Token ();
00054
00055 void destruyeToken();
00056
00057 int abrirFichero(const char * f);
00058
00059
00060
00061
00062 void cerrar(){
00063 if (fichero && fichero.is_open()) fichero.close();
00064 }
00065
00066 inline void reposicionarFichero(int off = 0){
00067
00068 indice = off;
00069 }
00070
00071 inline int getOffset(){
00072
00073 return indice;
00074 }
00075
00076 int leeLinea();
00077
00078
00079
00080
00081
00082
00083
00084 int lee(int ncampos, char * palInicial = NULL);
00085
00086
00087
00088
00089
00090
00091
00092 int tokenizar(const char * s);
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102 char * token(int n);
00103
00104
00105
00106
00107 int getnPalabras(){
00108 return nPalabras;
00109 }
00110
00111
00112 inline char * getLinea(){
00113 return (linea);
00114 }
00115
00116
00117 inline bool finFichero(){
00118 return (finFich);
00119 }
00120 };
00121
00122 #endif