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

Pobieranie z pliku w pętli

Ostatnio zmodyfikowano 2018-08-08 17:53
Autor Wiadomość
Wolfff
Temat założony przez niniejszego użytkownika
Pobieranie z pliku w pętli
» 2018-08-08 15:17:06
Cześć, już piszę to tak długo że sam sobie mieszam w głowie i nie wiem gdzie popełniłem błąd.
Plik tekstowy jest podzielony na części. Najpierw pobieram wszystkie linijki od wystąpienia linijki z np.: "+++" , do wystąpienia "---".
Po wystąpieniu "---" znowu pobieram linijki tekstu do innej zmiennej do wystąpienia "#" itp.
Starter to liczba która najpierw jest wyszukiwana w pliku żeby określić miejsce od którego należy zacząć te operacje a stopper to liczba określająca
początek następnego bloku tekstu na którym nie chcę przeprowadzać operacji.
Najładniej by to wyglądało przy użyciu switch(tekst) ale to nie działa z std::string, więc zostałem zmuszony używać takiej formy.
Przechodząc do problemu: pobiera dobrze po "+++" potem pobiera tylko linijke "---" i ignoruje wszystko po tym, następnie dobrze pobiera po "#" i ignoruje wszystko znowu po "##".
Jeżeli ktoś ma pomysł jak to poprawić żeby działało w zamierzony sposób lub poprawić czytelność kodu to byłbym bardzo wdzięczy za sugestie!
C/C++
std::getline( plik, tekst );
if( !( std::string::npos == tekst.find( starter ) ) )
{
    std::cout << "found it!" << std::endl;
   
    while( tekst != stopper )
    {
        std::getline( plik, tekst );
        if( tekst == "+++" )
        {
            do
            {
                std::getline( plik, tekst );
                sto.push_back( tekst );
                std::cout << "gettin the story!" << std::endl;
            } while( tekst != "---" );
           
        } else if( tekst == "---" )
        {
            std::getline( plik, tekst );
            opt_o = tekst;
            std::getline( plik, tekst );
            opt_t = tekst;
           
        } else if( tekst == "#" )
        {
            do
            {
                std::getline( plik, tekst );
                result_o.push_back( tekst );
            } while( tekst != "##" );
           
        } else if( tekst == "##" )
        {
            do
            {
                std::getline( plik, tekst );
                result_t.push_back( tekst );
            } while( tekst != stopper );
           
        }
    }
}
plik.close();
P-172031
pekfos
» 2018-08-08 16:13:20
Jakbyś wiedział, że jest coś takiego jak debugger, to byś zlokalizował problem szybciej niż ci zajęło wklejenie tu kodu.
C/C++
while( tekst != stopper )
{
    std::getline( plik, tekst ); // 1. Wczytujesz +++; 4. Zastępujesz --- następną linią
    if( tekst == "+++" )
    {
        do
        {
            std::getline( plik, tekst );
            sto.push_back( tekst );
            std::cout << "gettin the story!" << std::endl;
        } while( tekst != "---" ); // 2. Wczytano ---
       
    } else if( tekst == "---" ) // 3. Nie wchodzisz, bo else if; 5. Nie wchodzisz, bo już nie masz ---
Prześledzenie tego w debuggerze to max 2 sekundy.
P-172032
Wolfff
Temat założony przez niniejszego użytkownika
» 2018-08-08 16:36:23
Nie potrafię jeszcze dobrze używać debuggera, nigdy też nie potrzebowałem. Dzięki za pomoc ale nie rozumiem Twojego podejścia z tą pasywną agresją a potem i tak pomocą.
P-172033
mateczek
» 2018-08-08 16:54:07
wpisz w google lub w youtube Twoje środowisko programistyczne + debuger
najczęściej to jest ikonka robaka w IDE
P-172034
Wolfff
Temat założony przez niniejszego użytkownika
» 2018-08-08 17:53:29
Dzięki, poduczę się
P-172035
« 1 »
  Strona 1 z 1