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
Potete confermare questa mia ricerca?Codice PHP:$query = mysql_query("DELETE FROM tabella WHERE nome = gianni");
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:
E questa è la definizione del metodo elimina: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();
};
Che errore ho commesso?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);
}
}
Grazie

Rispondi quotando