Odczytywanie ostatnich 5 wierszy plików
Ostatnio zmodyfikowano 2017-03-06 12:23
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. 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;
|
|
mateczek |
» 2017-03-04 15:22:41 zobacz takie rozwiązanie #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; } }
|
|
damiaan91 Temat założony przez niniejszego użytkownika |
» 2017-03-05 15:23:34 Niestety to nie działa... |
|
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. |
|
mokrowski |
» 2017-03-05 16:59:58 #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; }
|
|
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? |
|
carlosmay |
» 2017-03-06 00:16:58 |
|
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
|
|
« 1 » 2 |