Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Problem z przepisaniem pliku bez danego wiersza

Ostatnio zmodyfikowano 2012-01-18 17:25
Autor Wiadomość
Wonski92
Temat założony przez niniejszego użytkownika
[C++] Problem z przepisaniem pliku bez danego wiersza
» 2012-01-10 14:20:46
Witam,

Mam następujący problem. Muszę napisać program na programowanie polegający na tym, że ma on tworzyć bazy studentów, pracowników, grup przedmiotowych itp. Mam jeden problem, który uniemożliwia mi zakończeni i oddanie tego projektu. Potrzebuję funkcji , która usunie mi prowadzącego z grupy, czyli z pliku tekstowego usunie mi wiersz, który rozpoczyna się "Prowadzacy". Wymyśliłem coś takiego :
C/C++
void kasuj_prowadzacego( string sciezka )
{
    fstream plik( sciezka.c_str() )
    string dane, a;
    while( !plik.eof() )
    {
        getline( plik, dane );
        a = dane.substr( 0, 10 );
        if( a != "Prowadzacy" )
             plik >> dane;
       
    }
    plik.close();
}
Chciałem zrobić tak, że będę pobierał dane z pliku wierszami, następnie będę tworzył stringa, który będzie zawierał tylko początek pobranego wiersza i jeśli on jest różny od "Prowadzacy" to zapisuje ten wiersz do pliku o tej samej nazwie, jeśli byłby taki sam to wiersz nie zostałby zapisany ponownie do tego pliku. Może mi ktoś podpowiedzieć co tu jest źle ?? Wszystko działa, nic się nie zapętla, ale nie usuwa mi tego wiersza :/ Bardzo dziękuję za ewentualną pomoc :D
P-47827
wizardus
» 2012-01-10 14:32:22
Ja tam się na plikach nie znam, ale z tego co mi wiadomo klasa string posiada funkcję .find() która wyszukuje pozycje danego ciągu znaków ^^ - oczywiście w stringu
P-47829
jsc
» 2012-01-10 15:08:23
A jak otwierasz plik?
P-47832
Wonski92
Temat założony przez niniejszego użytkownika
» 2012-01-10 16:57:43
Ahh zapomniałem dopisać. Otwieram go w trybie ios::in|ios::out, nie wiem czy dobrze.
P-47845
wizardus
» 2012-01-10 17:04:22
Czyli do odczytu i zapisu. Teoretycznie więc nie to jest przyczyną.

Spróbuj więc zapisać cokolwiek do prostego pliku txt, spróbuj to odczytać. Jak Ci się to uda, to zostanie tylko wynalezienie sensownego rozwiązania. Ja bym to zrobił w sposób mało optymalny :P Pobierał każdą linię do stringa, szukał w niej linijki "Prowadzący". Jeśli znaleziona, omijał, jeśli nie - wrzucał do Tablicy stringów, a potem spowrotem wpisał do pliku. Może to i jest droga "na okrędkę" ale powinna zadziałać :]
P-47847
draculeq
» 2012-01-10 17:31:27
problem jest w ">>"

ten operator działa analogicznie jak "cin" i "cout".

<< - wypisywanie z programu
>> - wpisywanie do programu
P-47860
wojownik266
» 2012-01-10 19:39:30
Nie wiem czy dobrze Cię zrozumiałem ale masz tu taki sobie programik który usuwa ostatnie słowo np. "prowadzacy" a to co zostanie zapisuje do pliku.

C/C++
#include <iostream>
#include <string>
#include <deque>
#include <fstream>

using namespace std;

int main()
{
    ofstream out( "plik.txt", ios::out | ios::in );
    deque < string > call;
   
    call.push_back( " Jeden " );
    call.push_back( " Prowadzacy " );
    for( unsigned int i = 0; i < call.size(); ++i )
         cout << call[ i ];
   
    call.erase( call.end() + 1 ); //usuwa ostatnie słowo - "prowadzacy"
    for( unsigned int i = 0; i < call.size(); ++i ) {
        out << call[ i ] << endl;
       
    }
    cin.get();
    return 0;
}
 
P-47883
Wonski92
Temat założony przez niniejszego użytkownika
» 2012-01-11 22:54:07
@Draculeq zmieniałem ten operator i to mi nic nie pomagało. Z tego co mi napisałeś to dobrze jest w tym moim kodzie, bo jeśli początek jest różny od "Prowadzacy" to program ma wpisać do pliku daną linijkę. Jeśli ma taki początek program ma pominąć wpisanie tej linijki przy przepisywaniu.

@Wojownik nie do końca mi o to chodziło. Nie za bardzo też wiem co robi to deque, jestem początkującym programistą. Nie chodzi mi o to , żeby program nie przepisał zwrotu "Prowadzący" tylko jeśli pobrana linijka zawiera go , pomija ją przy przepisaniu pliku ;)
P-47988
« 1 » 2
  Strona 1 z 2 Następna strona