[C++, fstream] Wielokrotne odczytywanie tych samych informacji z otwartego pliku
Ostatnio zmodyfikowano 2013-05-26 09:58
sprd123 Temat założony przez niniejszego użytkownika |
[C++, fstream] Wielokrotne odczytywanie tych samych informacji z otwartego pliku » 2013-05-25 20:14:06 Witam! Czy jak chce drugi raz w programie odczytac ten sam plik. wystarczy uruchomic go uzywajac: np. fstream dane( "dane.bin", ios::binary | ios::in )
czy moze fstream dane( "dane.bin, ios::binary|ios::in|ios::beg)
Jak widac, chodzi mi o to co robi samo ios::in. Bo wszedzie jest napisane ze pozwala na odczyt pliku, natomiast nie jest nigdzie wyjasnione czy automatycznie ustawia jakby wskaznik na poczatek pliku. Czy trzeba mu pomoc z ios::beg? Pozdrawiam! |
|
pekfos |
» 2013-05-25 20:17:08 Aby ustawić pozycję na koniec pliku, trzeba jawnie podać tryb ios::ate lub ios::app. Bez tego plik jest otwierany z pozycją ustawioną na początku. Poza tym, by ponownie odczytać plik, nie musisz go ponownie otwierać. Wystarczy użyć seekg(): PS: ios::beg to nie jest tryb otwierania pliku. |
|
sprd123 Temat założony przez niniejszego użytkownika |
» 2013-05-26 09:58:48 Rozumiem. Zrobilem to troszke inaczej, poruszajac sie seekg ale z ios::beg; prosze o sprawdzenie mi tego programiku. Kompiluje sie i dziala. Ale chcialbym z takiego czysto informatycznego spojrzenia dowiedziec sie czy jest ok. Glownie chodzi mi o to przejscie miedzy pierwszym odczytem plik a drugim. Pozdrawiam serdecznie! :) #include <iostream> #include <fstream> using namespace std;
struct miejsc { char miejscowosc[ 40 ]; float mieszkancy; };
void utworz_plik() { int i = 0; char znak; miejsc a; ofstream dane( "dane.bin", ios::binary ); do { cout << "Miejscowosc " << i + 1 << ":" << endl << endl; cout << "Podaj nazwe:" << endl; cin >> a.miejscowosc; cout << "Podaj l.mieszkancow:" << endl; cin >> a.mieszkancy; dane.write(( char * ) & a, sizeof( miejsc ) ); cout << "Czy chcesz podac kolejna miejscowosc? , T/t" << endl; cin >> znak; i++; } while( znak == 't' || znak == 'T' ); dane.close(); }
int main() { miejsc b; float srednia2; int ilosc; cout << "Witaj w programie!" << endl; utworz_plik(); fstream dane( "dane.bin", ios::binary | ios::in ); ofstream srednia( "srednia.txt" ); ofstream wyszukane( "wyszukane.txt" ); srednia2 = 0; ilosc = 0; while( !dane.eof() ) { dane.read(( char * ) & b, sizeof( miejsc ) ); if( dane.good() ) { srednia2 = srednia2 + b.mieszkancy; ilosc++; } } if( ilosc > 0 ) { srednia << "Srednia liczba mieszkancow to:" << endl; srednia2 = srednia2 / ilosc; srednia << srednia2 << endl; } srednia.close(); dane.clear(); wyszukane << "Miejscowosci, w ktorych l. mieszkancow przekracza srednia to:" << endl; dane.seekg( 0, ios::beg ); while( !dane.eof() ) { dane.read(( char * ) & b, sizeof( miejsc ) ); if( dane.good() ) { if( b.mieszkancy > srednia2 ) { wyszukane << b.miejscowosc << endl; wyszukane << "l.mieszkancow:" << endl; wyszukane << b.mieszkancy << endl << endl; } } } dane.clear(); dane.close(); wyszukane.close(); return 0; }
|
|
« 1 » |