|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
[C++] Ricerca stringa in un file.txt
Salve a tutti.
Avete qlc idea di come si faccia a cercare una stringa in un file.txt?? Per fare un esempio pratico: File.txt Lunedì 1 Gennaio Martedì 2 Gennaio Mercoledì 3 Gennaio ecc ecc Supponiamo che debba ricercare o estrarre 'Mercoledì'... Come faccio? Premetto che conosco la libreria fstream quindi come aprire, chiudere, leggere e scrivere un file... |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
|
Quote:
In questo caso, se la memoria non mi inganna, puoi tranquillamente leggere una riga ed usare una strtok() per splittarla, passandogli lo spazio come carattere divisore. A quel punto, ti tieni il primo token ("Mercoledì"), scarti i successivi ("3" e "Gennaio") e passi a leggere la riga successiva.
__________________
Il sole è giallo |
|
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
no perchè ti spiego... Devo creare un calendario in cui memorizzo degli eventi....supponiamo che ho inserito l'evento "Andare a prendere il pane" in una x data e "Andare a prendere il prosciutto" in un'altra y data...Ah tt quanto è in un file.txt....
Ora devo fare una ricerca e inserisco: "andare a prendere".... Come risultato mi darà: "Andare a prendere il pane" e "Andare a prendere il prosciutto" T è più chiaro? |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
|
Se devi cercare le sottostringhe, sempre se la ruggine nei miei neuroni non è troppa, ti conviene utilizzare la funzione find della <string.h>.
Leggi la riga del file, con la find controlli se la stringa che stai cercando è presente nella riga letta (ovvero è una sua sottostringa), e in caso positivo aggiungi la riga letta al risultato. P.S. Questo è un forum e di spazio ce n'è a volontà, cerca di evitare le abbreviazioni tipiche da sms (tt, t, nn et similia) perchè rendono la lettura di difficile comprensione, almeno per noi anziani che i cellulari li abbiamo scoperti in tarda età ![]()
__________________
Il sole è giallo |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
ah scusami
![]() ![]() |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: May 2001
Messaggi: 12840
|
Come ha detto yorkeiser usando la funzione strtok() passandogli il carattere spazio, puoi separare le varie parole.
A quel punto puoi fare un ciclo usando la funzione strncmp() con la stringa che devi cercare, e fargli stampare solo i token che soddisfano strncmp()==0. Edit: mm nel tuo caso vuoi la frase di origine a quanto ho capito, questo complica le cose... Devi usare altri tokens per separare le singole frasi. Come le separi le frasi? Edit: ok prova ad usare la funzione strstr(), sembra funzionare bene per il tuo scopo senza ulteriori complicazioni, l'unica cosa è che è case sensitive (ovvero fa distinzione tra maiuscole e minuscole). http://www.cplusplus.com/reference/c...string/strstr/ Ultima modifica di WarDuck : 16-02-2010 alle 12:13. |
![]() |
![]() |
![]() |
#7 |
Moderatore
Iscritto dal: Nov 2006
Messaggi: 21764
|
ciclo di lettura a righe del file e all'interno cerchi il primo carattere spazio poi ottieni la sottostringa con strncpy
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX) Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000 |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
E' in C++ impariamo ad usare la libreria del C++
![]() ostringstream e passa la paura ![]() |
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
wow ma quante risposte
![]() Cionci: è per un progetto di università. Credo che il professore voglia che utilizziamo nel progetto solo le cose viste in classe... Comunque ora chiedo...se si può vedo come funziona la libreria che mi hai enunciato... |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
In classe hai fatto strtok ?
Mi immagino che in classe tu abbia fatto gli stream (cout, cin o fstream). stringstream è uno stream e si usa come tutti gli altri stream. Solo che preleva i dati da una stringa passata al costruttore. PS: ho sbagliato, serve istringstream ![]() |
![]() |
![]() |
![]() |
#11 | |
Moderatore
Iscritto dal: Nov 2006
Messaggi: 21764
|
Quote:
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX) Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000 |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
In effetti dipende un po' dal corso. Se los copo è quello di imparare cicli, if, condizioni e la manipolazione di stringhe in stile C allora è la soluzione migliore.
|
![]() |
![]() |
![]() |
#13 |
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
Si in effetti utilizzare la libreria che mi hai detto non sarebbe indice di voler fare le cose (anche se voglio dire: se le hanno fatte ste librerie perchè non potrei usarle
![]() |
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:16.