Salve ragazzi
facendo un po di ricerche nel forum e su internet non sono riuscito a trovare una funzione in c++ che mi elimini una riga da un file senza riscriverlo completamente trascurando la linea che non vogliamo cancellare.
Cioè non esiste una funzione tipo quella di php
Codice PHP:
$query = mysql_query("DELETE FROM tabella WHERE nome = gianni");
Potete confermare questa mia ricerca?
Ora vorrei sapere come posso farlo riscrivendo il file e utilizzando i vector.
vi posto il codice che sono riuscito a scrivere ma non funziona bene poichè cancella tutto il file o meglio non lo riscrive.
Questa è la mia classe:
Codice PHP:
#include <iostream>
#include <string>
using namespace std;
class squadre {
//definisco gli attributi relativi alla classe
string nome;
int giocate;
int vinte;
int perse;
int pari;
int gf;
int gs;
int penalita;
public:
//definizione dei vari metodi della classe
//Costruttore di default
squadre() {
nome = "";
giocate = 0;
vinte = 0;
perse = 0;
pari = 0;
gf = 0;
gs = 0;
penalita = 0;
}
//Costruttore
squadre (string name, int played, int won, int lost, int drawn, int scored, int conceded, int penality) {
nome = name;
giocate = played;
vinte = won;
perse = lost;
pari = drawn;
gf = scored;
gs = conceded;
penalita = penality;
}
//Distruttore
~squadre() {
cout << "Libero la memoria occupata...";
}
//Prototipi dei vari metodi sulla classe (definizione trattata successivamente)
void elimina();
};
E questa è la definizione del metodo elimina:
Codice PHP:
void squadre::elimina(){
//Puntatore al file
FILE *filepunt;
if((filepunt = fopen("squadre.dat","rb"))==NULL)
{
//Il file non esiste non posso eliminare nessuna squadra
//Restituisco un messaggio di errore
cout << "\n Il file 'squadre.dat' e' inesistente.\nNon e' stata inserita nessuna squadra!";
} else {
//il file è stato aperto precedentemente. Chiedo all'utente il nome della squadra da eliminare
cout << "Inserisci il nome della squadra da eliminare\n";
//creo una variabile locale per il nome e una per definire se esiste una squadra con quel nome
int trovato=0;
string nome_temp;
cin >> nome_temp;
//verifico se effettivamente il nome inserito esiste
while(fread (this,sizeof(*this),1,filepunt) && !feof(filepunt))
{
if(nome == nome_temp)
{
cout << "Trovata 1 squadra con il nome inserito: ";
//Stampo i titoli delle colonne
cout << "Nome";
cout << "\tGiocate";
cout << "\tVinte";
cout << "\tPerse";
cout << "\tPari";
cout << "\tFatti";
cout << "\tSubiti";
cout << "\tPenalita'";
cout << "\n" << endl;
cout << nome;
cout << "\t" << giocate;
cout << "\t" << vinte;
cout << "\t" << perse;
cout << "\t" << pari;
cout << "\t" << gf;
cout << "\t" << gs;
cout << "\t" << penalita;
cout << endl << endl;
trovato = 1;
break;
}
}
if(trovato==1) {
vector<squadre> vect;
//inserisco nel vector tutti gli elementi tranne quello da eliminare
while(fread (this,sizeof(*this),1,filepunt) && !feof(filepunt))
{
if(nome != nome_temp)
{ vect.push_back(*this);}
}
//chiudo il file e lo apro in modalita scrittura cancellando ogni dato sul file
fclose(filepunt);
filepunt = fopen("squadre.dat","wb");
//inserisco gli elementi del vector all'interno del file
vector<squadre>::iterator iter;
for(iter = vect.begin(); iter != vect.end(); iter++){
fwrite(this, sizeof(*this), 1, filepunt);
}
} else {
cout << "Non esiste nessuna squadra con questo nome!";
}
fclose(filepunt);
}
}
Che errore ho commesso?
Grazie