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 COMUNE | SIGLA | CODICE ELETTORALE | CODICE ISTAT | CODICE BELFIORE |
---|
7546 | VENEZIA | VE | 1050870420 | 027042 | L736 |
5772 | ROMA | RM | 2120700900 | 058091 | H501 |
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;
}