Strona 1 z 1

C++ funkcja kasowania

: 16 maja 2009, o 17:09
autor: marek12
Co tu trzeba zmienic aby ta funkcja kasowała linie z okreslonym kontaktem?

Kod: Zaznacz cały

void del()
{
     string del;
                  cout << "Enter your contact:"<<endl;
 
                       cin >> info.word;
                       phonebook.open("c:\phonebook.txt",ios::in);
                       phonebook.clear();
                       int counter =0;
                        while (!phonebook.eof())
                        {
                             phonebook >> info.fword;
                              int j=strcmpi(info.fword,info.word);
                              if (j==0)
                              {
                                        cout << "contact was found in the file :)"<<endl;
                                        cout<< info.word << endl;
                                        counter ++;
                                        break;
                                        }
                              }
                             if (counter == 0)
                       cout << "contact was not found in the file :(" << endl;
 
                         phonebook>>info.fname>>info.sname>>info.lname>>info.phonenumber>>info.mobilenumber>>info.email;
                         info.fname.clear();
                         info.fname=;
 
 
 
                         phonebook<<info.fname;
 
 
 
                       phonebook.close();
 
 
                       }

C++ funkcja kasowania

: 16 maja 2009, o 17:41
autor: Moraxus
Obawiam się, że będziesz musiał trochę pozmieniać w tej pętli.
Jeżeli każdy kontakt jest w innej linii to zrób to w ten sposób:
Stwórz sobie 2 bufory:

Kod: Zaznacz cały

char line[256];
char file[2048]
W pierwszym będziesz przechowywał bierzącą linię a w drugim wyjściowy plik (bez linii z kontaktem).
Za pomocą funkcji getline() zczytujesz po kolei wszystkie linie z pliku do zmiennej line.
Następnie wybraną przez siebie metodą sprawdzasz, czy kontakt w line to szukany kontakt.
Jeśli tak, to przeskakujesz dalej instrukcją continue - w przeciwnym wypadku dopisujesz linię do file.
W ten sposób w zmiennej file znajdzie się cały plik oprócz danego kontaktu.
Na końcu bufor file zapisujesz jako plik pod tą samą nazwą, co plik otwierany.
Mam nadzieję, że sobie jakoś poradzisz

C++ funkcja kasowania

: 16 maja 2009, o 19:58
autor: marek12
Próbowałem w vectorach zastąpić daną linie nastepną. ale mi nie wychodziło.
A tym powyższym sposobem nie wiem jak zrobic

C++ funkcja kasowania

: 16 maja 2009, o 20:32
autor: Moraxus
Można na wektorach, ale nie ma co zastępować linii.
Poprostu zadeklaruj sobie wektor w ten sposób:

Kod: Zaznacz cały

std::vector<std::string> lines;
Wektor ten będzie przechowywał linie pliku wynikowego.
Przy każdym przejściu pętli zczytujesz linię, jeżeli ta linia zawiera nie zawiera szukanego kontaktu, to dajesz:

Kod: Zaznacz cały

lines.push_back(linia);
Jeśli zawiera, to poprostu nie dodajesz nic do wektora lines.
Po wykonaniu pętli w lines będziesz miał wszystkie linie pliku z wyjątkiem tej, która zawiera szukany kontakt.

C++ funkcja kasowania

: 16 maja 2009, o 21:36
autor: marek12
dzieki za podopwiedzi

C++ funkcja kasowania

: 16 maja 2009, o 22:26
autor: Moraxus
Nie do końca, bo lines nie wrzucasz całych linii, tylko ich części.
Najlepiej by było, jakbyś poczytał o strumieniach i operacjach na plikach w C++.
Jutro mogę spróbować napisać Ci coś takiego, tylko podaj dokładną strukturę pliku i jakiś przykładowy plik.