C++ funkcja kasowania

marek12
Użytkownik
Użytkownik
Posty: 696
Rejestracja: 5 lut 2008, o 15:38
Płeć: Mężczyzna
Lokalizacja: marki
Podziękował: 165 razy
Pomógł: 20 razy

C++ funkcja kasowania

Post 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();
 
 
                       }
Moraxus
Użytkownik
Użytkownik
Posty: 223
Rejestracja: 23 lis 2008, o 18:10
Płeć: Mężczyzna
Podziękował: 3 razy
Pomógł: 79 razy

C++ funkcja kasowania

Post 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
marek12
Użytkownik
Użytkownik
Posty: 696
Rejestracja: 5 lut 2008, o 15:38
Płeć: Mężczyzna
Lokalizacja: marki
Podziękował: 165 razy
Pomógł: 20 razy

C++ funkcja kasowania

Post 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
Moraxus
Użytkownik
Użytkownik
Posty: 223
Rejestracja: 23 lis 2008, o 18:10
Płeć: Mężczyzna
Podziękował: 3 razy
Pomógł: 79 razy

C++ funkcja kasowania

Post 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.
marek12
Użytkownik
Użytkownik
Posty: 696
Rejestracja: 5 lut 2008, o 15:38
Płeć: Mężczyzna
Lokalizacja: marki
Podziękował: 165 razy
Pomógł: 20 razy

C++ funkcja kasowania

Post autor: marek12 »

dzieki za podopwiedzi
Ostatnio zmieniony 16 maja 2009, o 23:53 przez marek12, łącznie zmieniany 1 raz.
Moraxus
Użytkownik
Użytkownik
Posty: 223
Rejestracja: 23 lis 2008, o 18:10
Płeć: Mężczyzna
Podziękował: 3 razy
Pomógł: 79 razy

C++ funkcja kasowania

Post 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.
ODPOWIEDZ