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

Odczytywanie ostatnich 5 wierszy plików

Ostatnio zmodyfikowano 2017-03-06 12:23
Autor Wiadomość
damiaan91
Temat założony przez niniejszego użytkownika
Odczytywanie ostatnich 5 wierszy plików
» 2017-03-04 13:36:39
Proszę o pomoc, chciałbym odczytać ostatnie 5 wierszy z pliku...
Wiersze, za każdym wykonaniem programu będą się zwiększać, więc zależy mi na tym, aby, program ustawiał się na końcu pliku i odczytywał ostatnie 5 wierszy z pliku.

C/C++
ifstream plik3( "C:/Ewidencja/plik2/ewidencja.xls", ios::in );

if( plik3.good() == true )
{
    int licznik;
   
    string tekst;
    while( !plik3.eof() )
    {
       
        getline( plik3, tekst );
        {
            licznik++;
            if( licznik > 3 )
            {
                break;
            }
            cout << tekst << endl;
        }
    }
    plik3.close();
} else cout << "Error! Nie udalo otworzyc sie pliku!" << endl;

P-158507
mateczek
» 2017-03-04 15:22:41
zobacz takie rozwiązanie
C/C++
#include <iostream>
#include <fstream>
#include<list>
using namespace std;
int main()
{
    ifstream plik3( "text.txt" );
    if( !plik3 ) return 0;
   
    string tekst;
    list < string > lista;
    while( getline( plik3, tekst ) ) {
        lista.push_back( tekst );
        if( lista.size() > 5 ) lista.erase( lista.begin() );
       
    }
   
    for( string & s: lista ) {
        cout << s << endl;
    }
}
P-158512
damiaan91
Temat założony przez niniejszego użytkownika
» 2017-03-05 15:23:34
Niestety to nie działa...
P-158589
mateczek
» 2017-03-05 15:46:49
a co Ci nie działa ?? kompilacja?? uruchomienie?? jakieś błędy ??

ponieważ raczej nie da się skakać po pliku linijkami. Trzeba przelecieć cały od początku. Program wypełnia listę liniami tektu (odkładając jak na stos), A gdy lista się przepełni program usuwa pierwszy element. Tym samym lista zawiera zawsze ostatnich 5 linii.
P-158590
mokrowski
» 2017-03-05 16:59:58
C/C++
#include <iostream>
#include <fstream>
#include <cstdlib>

void seekToLastNLines( std::ifstream & file, size_t count ) {
    std::streampos position = 0;
    for( size_t i = 0; i < count; ++i ) {
        do {
            position += 1;
            file.seekg( -( position ), std::ios_base::end );
        } while( file.get() != '\n' );
       
    }
}

int main() {
    using namespace std;
   
    ifstream file( "data.txt" );
    if( !file ) {
        cerr << "Problem z otworzeniem pliku\n";
        return EXIT_FAILURE;
    }
   
    seekToLastNLines( file, 5 );
    cout << file.rdbuf();
   
    return EXIT_SUCCESS;
}
P-158593
damiaan91
Temat założony przez niniejszego użytkownika
» 2017-03-05 23:14:24
Obydwa kody mi się nie kompilują i kompilator wywala błędy już na samym początku...u was jest to samo?
P-158616
carlosmay
» 2017-03-06 00:16:58
P-158619
mateczek
» 2017-03-06 09:04:03
mi się kompilują bez problemu. Jedynie w programie od @mokrowski wypluł mi 3 ostatnie wiersze miast pięciu. Więc być może jest jakieś małe niedopatrzenie do przejechania debugerem
//edit
P-158621
« 1 » 2
  Strona 1 z 2 Następna strona