Ok, io ci ho provato...
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
/*
* Funzione che prende in ingresso una riga letta dal file
* e restituisce il nome del cliente, cioe' tutto quello
* che sta prima della virgola
*/
string get_nome_cliente(string riga_file) {
return riga_file.substr(0, riga_file.find(","));
}
/*
* Funzione che prende in ingresso una riga letta dal file
* e restituisce il codice del viaggio, cioe' tutto quello
* che sta dopo la virgola, convertito in un intero
*/
int get_codice_viaggio(string riga_file) {
int codice;
int pos_virgola = riga_file.find(",");
int lungh = riga_file.length();
string stringa_codice = riga_file.substr(pos_virgola+2, lungh - pos_virgola);
istringstream (stringa_codice) >> codice;
return codice;
}
int main(int argc, char const *argv[])
{
fstream my_file;
// apro il file in lettura
my_file.open("clienti.txt", fstream::in);
string line;
string nome_inserito;
cout << "Inserire il nome del cliente: ";
getline(cin, nome_inserito);
cout << "Nome inserito: " << nome_inserito << endl;
bool cliente_nella_lista = false;
while(getline(my_file, line)) {
//cout << "Nome trovato: " << get_nome_cliente(line) << endl;
//cout << "Codice viaggio: " << get_codice_viaggio(line) << endl;
string nome_trovato = get_nome_cliente(line);
if (nome_inserito == nome_trovato) {
cout << "IL CLIENTE E' NELLA LISTA!" << endl;
cliente_nella_lista = true;
}
}
if(!cliente_nella_lista) {
my_file.close();
// apro il file in scrittura (con append)
my_file.open("clienti.txt", fstream::out | fstream::app);
cout << "Il cliente non e' nella lista: lo aggiungo" << endl;
// TODO Io scrivo solo il nome, poi se mai lo modifichi...
my_file << nome_inserito << endl;
cout << "Fatto" << endl;
}
my_file.close();
return 0;
}
Poi mi dici se qualcosa non ti è chiaro.