Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Esiste una funzione per cercare determinate parole in un file, vedere se sono presenti e ottenere quindi l'offset delle stesse all'interno dello stream ?
In pratica mi servirebbe una strstr() che anzichè parsare stringhe parsi il contenuto di un testo, e che anzichè ritornare un puntatore ritorni un offset.
L'ideale sarebbe poter usare le regex su file
Esiste qualcosa del genere o bisogna procedere "a mano" :P ?
Ultima modifica di Dani il gio 8 mag 2008, 4:35, modificato 1 volta in totale.
Dai un'occhiata alla libreria pcre (presente in Slackware). La usai anni fa per un progetto, implementa le espressioni regolari in C. Ora non ricordo bene l'API, ma forse trovi qualcosa di utile (magari non esattamente quello che ti serve, ma con le regex a disposizione puoi scrivere da te la funzione di cui hai bisogno). Facci sapere, può essere utile anche per altri.
Sono riuscito a scrivere del brevissimo e banalissimo codice che fa al caso mio; praticamente visto che il file è troppo grande e caricandolo in ram occuperebbe troppa memoria, basta leggere riga per riga e cercare qui la parola !
Sottovalutavo fgets(), ho ottenuto il risultato sperato utilizzando sorprendentemente poche risorse.
Dani ha scritto:@gioco: le pcre sembrano interessanti, ma che tu sappia agiscono anche su file ?
Ho dato una rapida occhiata alle API (ricordavo poco), ma non mi sembra che lo facciano.
Nel tuo caso mi pare che le necessità fossero due: leggere efficientemente un file di grandi dimensioni e cercare un pattern in un file. Le pcre risolvono il secondo, per il primo, oltre alla soluzione da te usata, può essere utile mmap (man 2 mmap). Una volta che hai un metodo efficiente per leggere un file puoi usare le funzioni di pcre sulle stringhe.
man 1 grep ha scritto:Egrep is the same as grep -E.
man 1 grep ha scritto:-E, --extended-regexp
Interpret PATTERN as an extended regular expression (see below).
Peccato, mi sarebbero state utili altrimenti.
Per le regex su stringhe in genere uso le funzioni delle glibc, quindi se sono costretto a leggere riga per riga una volta che ho i dati in un buffer vanno bene queste.