PDA

View Full Version : [C++] ha senso creare questa libreria per il parsing di file?


shang84
13-11-2005, 15:55
Ciao,
pensavo di crearmi una libreria per fare parsing di file.
Le funzionalità della libreria devono essere:

trovare l'offset del primo carattere che si trovi all'interno di un file dopo un pattern passato come stringa. I limiti in cui verrà ricercato il carattere sono comunque compresi fra: SEEK_SET e SEEK_END

pseudo codice (non fate troppo caso agli errori):


long seek_pattern(long start,long search_limit, string pattern, FILE * file){
string buffer;
if(start>SEEK_END)
return -1;

if(search_limit>SEEK_END)
return -1;

fseek(msmFile,SEEK_SET,start);

string::size_type len;
len = pattern.length();
int length << len;

if(search_pattern(file,search_limit,pattern,buffer)==true)
return ftell(file);
}

la funzione search_pattern è ricorsiva e ricercherà all'interno del file il pattern richiestro confrontando di volta in volta i caratteri che sta leggendo.

Ad esempio alla prima chiamata della funzione se si sta leggendo 'c' dal file e il primo carattere del pattern è 'c' allora richiamerà se stessa passandogli il buffer + 'c', altrimenti richiamerà se stessa passandogli il buffer vuoto.

es pseudo codice

bool search_pattern(FILE*file,string pattern,string buffer)
la funzione richiama se stessa passando il buffer +
il carattere che sta leggendo nel caso il carattere del buffer corrisponda all'iesimo carattere della stringa.
Altrimenti richiamerà se stessaa passando il buffer vuoto.
Si arriverà al caso baso nel caso in cui il buffer sia uguale alla stringa passata come pattern o nel caso in cui si sia raggiunto il limite di ricerca.
Verrrà restituito true se il pattern è stato trovato. false altrimenti.

Queste due funzioni .. .che ovviamente ora sono da correggere, perchè sono solo un'idea di massima.. poi saranno utilizzate per trovare la posizione dopo un pattern all'interno di un file. Trovata la posizione verrà chiamata ad esempio la funzione:


double * get_ndouble(int n_of_double_to_obtain,FILE *file,long limit){
//converte i caratteri che trova (Se numerici) in double
//e li salva nell'array che poi restiuira
// tutto questo fino al limite limit di ricerca passato

}


la quale restituira un puntatore ad una array di double trovati da quel punto in poi del file.

e cos' via per gli int e gli altri tipi fondamentali...

tutto questo per poter ricavare da un file degli array contententi valori che si trovino in una certa posizione e cosi in qualche modo simulare perl con le sue funzionalità di pattern matching su file.

Grazie per la pazienza e non distruggete questo thread dicendo che ho scritto codice che fa schifo perchè ripeto è solo una bozza di idea..

Thanks!

PS: esistono già librerie in c++ che fanno ciò?