Come faccio a leggere cercare delle parole in un file in txt

di il
18 risposte

Come faccio a leggere cercare delle parole in un file in txt

Sto facendo un programma  per calcolare il codice fiscale in c++ , sono riuscito ad aprire il file in txt e a  leggerlo tutto, adesso vorrei capire come si fa cercare il comune specifico e far uscire in console il codice del comune associato al nome. 

//utilizzo un file esterno e leggo i dati 

    ifstream input  ("lista.txt");
    
    if(!input){
    	cout<<"Qual cosa è andato storto (Apertura file non corretta) ";
	}
	else {
		while(input>>luogodinascita)
		cout<< luogodinascita ;
	}

18 Risposte

  • Re: Come faccio a leggere cercare delle parole in un file in txt

    La riga di codice  while(input>>luogodinascita) 

    legge l'intera riga dal file txt e la salva nella variabile luogodinascita

    ora dentro il while dovrai fare una cosa del genere (questo è pseudo codice

    	while(input>>luogodinascita){
    	
    		std::string my_line;
    		my_line = convert_to_std_string(luogodinascita);
    	
    		variabile find = my_line.funzione_cerca_stringa("Roma");
    		if(find == true){ // string found
    			cout<< my_line ;
    			break;
    		}
    	}

    Che tipo è la variabile luogodinascita ?

    meglio scrivere:

    
    if ( input.is_open("lista.txt",std::ifstream::in) ){
    	cout<<"Qual cosa è andato storto (Apertura file non corretta) ";
    }

    e non dimenticarti di chiudere il file alla fine del programma.

  • Re: Come faccio a leggere cercare delle parole in un file in txt

    02/01/2024 - LukeSkyWalker ha scritto:


    La riga di codice  while(input>>luogodinascita) 

    legge l'intera riga dal file txt e la salva nella variabile luogodinascita

    ora dentro il while dovrai fare una cosa del genere (questo è pseudo codice

    	while(input>>luogodinascita){
    	
    		std::string my_line;
    		my_line = convert_to_std_string(luogodinascita);
    	
    		variabile find = my_line.funzione_cerca_stringa("Roma");
    		if(find == true){ // string found
    			cout<< my_line ;
    			break;
    		}
    	}

    Che tipo è la variabile luogodinascita ?

    meglio scrivere:

    
    if ( input.is_open("lista.txt",std::ifstream::in) ){
    	cout<<"Qual cosa è andato storto (Apertura file non corretta) ";
    }

    e non dimenticarti di chiudere il file alla fine del programma.

    La variabile luogodinascita è già tringa e sapresti dirmi qual' è la funzione che cerca la stringa ?

    Grazie mille ancora 

  • Re: Come faccio a leggere cercare delle parole in un file in txt

    La variabile luogodinascita è già tringa e sapresti dirmi qual' è la funzione che cerca la stringa ?

    Non è cattivaria nei tuoi confronti ma credo che il forum serve ad aiutare le persone nei casi complicati 

    Are you lazy ?

    Vai bro …  qui trovi un sacco di riposte alle tue domande https://cplusplus.com/

  • Re: Come faccio a leggere cercare delle parole in un file in txt

    02/01/2024 - LukeSkyWalker ha scritto:


    La variabile luogodinascita è già tringa e sapresti dirmi qual' è la funzione che cerca la stringa ?

    Non è cattivaria nei tuoi confronti ma credo che il forum serve ad aiutare le persone nei casi complicati 

    Are you lazy ?

    Vai bro …  qui trovi un sacco di riposte alle tue domande https://cplusplus.com/

    No, semplicemente non me lo hanno neanche spiegato a scuola e voglio solo capire come si fa.

    Scusa se ti ho fatto perdere tempo. 

    Me lo farò da solo.

  • Re: Come faccio a leggere cercare delle parole in un file in txt

    No, semplicemente non me lo hanno neanche spiegato a scuola e voglio solo capire come si fa.

    Se vuoi diventare uno sviluppatore , bisogna iniziare a cercare soluzioni in maniera autonoma , poi se escono fuori problemi se ne discute, ma solo dopo aver tentato Una soluzione.

    Per curiosità  Che scuola Fai ?! Tecnico Industriale ?! 

    Alle superiori ti hanno spiegato le STD ?! 

    Ti hanno spiegato la programmazione and Oggetti ?! 

    Scusa se ti ho fatto perdere tempo. 

    Non ti preoccupare, nn ti devi scusare di nulla

    Me lo farò da solo.

    Scusami se ti senti offeso non era Mia intenzione offenderti 

    Se hai un po' di dimestichezza con l' inglese

    https://cplusplus.com/reference/string/string/find/

    C' è anche un esempio. 

    I passi sono

    1. Comprensione capire Cosa e come fare
    2. Scrivere codice 
    3. Lanciare l' eseguibile 

    Se non funziona:

    1. Cerca di capire dove nn funziona ,
    2.  indaga il piû possible sulle istruzioni che , secondo te, potrebbero dare errori, 

    se non hai risolto posta il codice e lo vediamo insieme

  • Re: Come faccio a leggere cercare delle parole in un file in txt

    Io faccio un itis e sono la 3 anno, per quanto riguarda il c++ ci siamo fermati agli array, mi sa che il mio profe è un po' lazy, comunque io avevo visto anche un' altra discussione su questo argomento (https://www.iprogrammatori.it/forum-programmazione/cplusplus/trovare-parola-una-stringa-t16840.html)

    e pensavo di usare anche questa ref  e  ho provato a scrivere per tutta la giornata, ma non ci sono riuscito e tranquillo non me la sono preso per nulla, anzi concordo sul fatto che ci sia sicuramente qualche persona più in difficoltà di me che si meriterebbe veramente un tuo aiuto  

    02/01/2024 - LukeSkyWalker ha scritto:


    No, semplicemente non me lo hanno neanche spiegato a scuola e voglio solo capire come si fa.

    Se vuoi diventare uno sviluppatore , bisogna iniziare a cercare soluzioni in maniera autonoma , poi se escono fuori problemi se ne discute, ma solo dopo aver tentato Una soluzione.

    Per curiosità  Che scuola Fai ?! Tecnico Industriale ?! 

    Alle superiori ti hanno spiegato le STD ?! 

    Ti hanno spiegato la programmazione and Oggetti ?! 

    Scusa se ti ho fatto perdere tempo. 

    Non ti preoccupare, nn ti devi scusare di nulla

    Me lo farò da solo.

    Scusami se ti senti offeso non era Mia intenzione offenderti 

    Se hai un po' di dimestichezza con l' inglese

    https://cplusplus.com/reference/string/string/find/

    C' è anche un esempio. 

    I passi sono

    1. Comprensione capire Cosa e come fare
    2. Scrivere codice 
    3. Lanciare l' eseguibile 

    Se non funziona perchè non hai capito dove è il big posta il codice e lo vediamo insieme

  • Re: Come faccio a leggere cercare delle parole in un file in txt

    02/01/2024 - LukeSkyWalker ha scritto:


    No, semplicemente non me lo hanno neanche spiegato a scuola e voglio solo capire come si fa.

    Se vuoi diventare uno sviluppatore , bisogna iniziare a cercare soluzioni in maniera autonoma , poi se escono fuori problemi se ne discute, ma solo dopo aver tentato Una soluzione.

    Per curiosità  Che scuola Fai ?! Tecnico Industriale ?! 

    Alle superiori ti hanno spiegato le STD ?! 

    Ti hanno spiegato la programmazione and Oggetti ?! 

    Scusa se ti ho fatto perdere tempo. 

    Non ti preoccupare, nn ti devi scusare di nulla

    Me lo farò da solo.

    Scusami se ti senti offeso non era Mia intenzione offenderti 

    Se hai un po' di dimestichezza con l' inglese

    https://cplusplus.com/reference/string/string/find/

    C' è anche un esempio. 

    I passi sono

    1. Comprensione capire Cosa e come fare
    2. Scrivere codice 
    3. Lanciare l' eseguibile 

    Se non funziona:

    1. Cerca di capire dove nn funziona ,
    2.  indaga il piû possible sulle istruzioni che , secondo te, potrebbero dare errori, 

    se non hai risolto posta il codice e lo vediamo insieme

    Comunque grazie per la ref adesso gli do un'occhiata 

  • Re: Come faccio a leggere cercare delle parole in un file in txt

    Ok adesso è tutto piû chiaro.

    Mi ricordavo bene , anche io ho fatto il tecnico Industriale, indirizzo elettronico, non mi avevano spiegato la programmazione and Oggetti “ C++” ma solo quella funzionale “C” . 

    Se è un esercizio che fai per conto tuo,

     va' bene il suggerimento che to ho detto prima.

    Altrimenti 

    se è un compito che ti ha dato il prof , e non ti ha spiegato la Programmazione and Oggetti,credo che sia piû opportuno non usare gli Oggetti, ma solo array di caratteri, e funzioni base del C.

    //Al posto di
    std::string my string
    // Usare puntatori a stringhe
    char* my_string;
    // oppure array di caratteri
    char my_string[64]
    

    Per il confronto usare 

    https://cplusplus.com/reference/cstring/strcmp/?kw=Strcmp

  • Re: Come faccio a leggere cercare delle parole in un file in txt

    Mi è venuto un dubbio non è che lo scopo dell'esercizio è implementare una funzione di tipo search ?

  • Re: Come faccio a leggere cercare delle parole in un file in txt

    Io devo ricreare l codice fiscale, questo significa che quando faccio il cin del comune io vorrei aprire un file esterno, cosa che ho fatto,  per poi applicarvi un filtro per trovare il codice del comune associato al comune.

    inizialmente avevo fatto così  

    ifstream input  ("lista.txt");
    
    if(!input){
    	cout<<"Qual cosa è andato storto (Apertura file non corretta) ";
    }
    else {
    
    	while(input>> riga){
    	if(comune==riga)
    
    		cout << riga;
    
    	}
    	}

    Così ho trovato il comune nel file il comune, adesso pensavo di unire, all'interno del txt, il codice e il nome del comune da un carattere speciale per poi leggere solo quello che viene dopo l'asterisco(solitamente i caratteri da leggere sono 4)

  • Re: Come faccio a leggere cercare delle parole in un file in txt

    Ok , ricapitolando :

    Inserisci da tasterira il nome del comune (ad esempio “Roma”) e nel file bisogna cercare ed estrarrre la stringa H501 .

    Domanda: 

    mi scrivi una qualsiasi riga del file che devi leggere ?

    immagino che il file sia una cosa del genere :

    NR.DESCRIZIONE COMUNESIGLACODICE ELETTORALECODICE ISTATCODICE BELFIORE
    7546VENEZIAVE1050870420027042L736
    5772ROMARM2120700900058091H501

    quindi presumo che per ogni riga dobbiamo cercare l'occorrenza ,"comune" 

    quindi la riga di codice 

    if(comune==riga) // NON fa' al caso nostro
    // non puoi paragonare una riga (formata da più parole) ad una sola parola
    //riga: ROMA;249242;;ulterioriCodici;...;..;H501;RM
    //comune: ROMA

    dovremmo fare qualcosa del tipo:

    spero di essere stato chiaro ,

    se c'è qualcosa che nn capisci dimmelo.

    // esempio della riga del tuo file txt: ROMA;249242;;ulterioriCodici;...;..;H501;RM
    // vogliamo cercare il codice per il comune di ROMA
    .......
    .......
    
    cin >> comune;  // da tastiera scriviamo ROMA !!!Attenzione all'Uppercase MAIUSCOLE e al Downcase MINUSCOLE !!! 
    
    ....
    ....
    // questa variabile ci dice l'indice
    // di dove è posizionata la nostra occorrenza ROMA;249242;;ulterioriCodici;...;..;H501;RM
    // in questo caso è 0 perche ROMA inizia alla posizione 0 della riga_stringa
    std::size_t pos_comune_trovato = std::string::npos;
    
    std::string str_codice_fiscale{""};
    
    while(input>>riga){		
    	pos_comune_trovato = riga.find(comune);// cerchiamo se il comune è presente all'interno della riga
    	
    	if( pos_comune_trovato != std::string::npos ) { 
    		// comune trovato !!
    		
    		// Abbiamo trovato la riga dove al suo interno è presente la stringa relativa al comune.
    		// Dobbiamo estrarre il suo codice		
    		// per fare cio dobbiamo posizionarci nel punto dove inizia il codice
    		// ROMA;249242;;ulterioriCodici;...;..;H501;RM --->> H501 inizia dalla posizione 36
    		// in questo esempio dati (colonne) nella riga sono divisi da un carattere ";" 
    		// dobbiamo contare quanti di questi caratteri "separatori"
    		// ci sono prima di arrivare al nostro codice fiscale, in questo caso 6
    		int num_colonna_codice_fiscale = 6;		
    		pos_comune_trovato = 0;		
    		for(int i=0; i<num_colonna_codice_fiscale; i++){
    			pos_comune_trovato++;
    			pos_comune_trovato = riga.find(";",pos_comune_trovato);		
    		}
    		// riga.substr(posizione,lunghezza);
    		// posizione: pos_comune_trovato+1 perchè saltiamo l'utlimo punto e virgola trovato
    		// lunghezza: 4 perchè H501 e tutti gli altri codici fiscali relativi ai comuni sono di 4 caratteri
    		str_codice_fiscale = riga.substr(pos_comune_trovato+1,4);		
    		
    		// una volta estratto il codice fare un		
    		break;
    	}		
    }
    
    if( str_codice_fiscale.size() == 0 ) {
    	cout << " !!! errore il comune richiesto non è presente nel file !!! " << endl;	
    	// forse è il caso di uscire dal programma con un exit
    	exit(1);
    	
    	// oppure return e ritornare nel main per re-iniziare il flusso
    	return CODICE_ERRORE_COMUNE_NON_TROVATO;
    }
  • Re: Come faccio a leggere cercare delle parole in un file in txt

    Grazie mille, ha funzionato !!!!!!!!!!!!!

  • Re: Come faccio a leggere cercare delle parole in un file in txt

    So' conento meno male

    posta un po'  il codice così gli do' una occhiata.

    Hai seguito la traccia che ti ho suggerito o hai intrapreso un'altra soluzione ?

    Non so' bene le regole del forum ma credo che tocca cambiare il titolo del post in “ Risolto : Come faccio a leggere cercare ….. ”

  • Re: Come faccio a leggere cercare delle parole in un file in txt

    Non è necessario (come regola), piuttosto una regola consiglierebbe di non fornire codice pronto all'uso come risposta ad un thread ma, piuttosto, di far scrivere all'utente il proprio codice in seguito a spiegazioni … ma va bene uguale …

Devi accedere o registrarti per scrivere nel forum
18 risposte