invisiblekid Temat założony przez niniejszego użytkownika |
Zapis do pliku tablicy (vector'a) » 2009-02-28 17:45:58 W jaki sposób można zapisać do pliku coś innego niż std::string? Napisałem taki kod: vector < int > tab; plik.write( & tab[ 0 ], tab.size() ); ale niestety instrukcja write obsługuje const char/ Tak wiec jak to zrobić, żeby przekazać zawartość tego kontenera do pliku. Myślałem jeszcze o takim rozwiązaniu: for( int i = 0; i < tab.size(); i++ ) plik << tab[ i ]; Tego rozwiązania nie sprawdzałem (ale można by dla bezpieczeństwa zapisać tab(i) do jakiegoś stringu i wtedy "plik << jakiśstr;"Dzieki z góry za pomoc :D |
|
DejaVu |
» 2009-02-28 17:49:52 vector < int > tab; plik.write(( char * ) & tab[ 0 ], tab.size() * sizeof( int ) );
|
|
invisiblekid Temat założony przez niniejszego użytkownika |
» 2009-02-28 17:53:16 cały czas nie działa. Może zacytuje log: 23 no matching function for call to `std::basic_ofstream<char, std::char_traits<char> >::write(int*, unsigned int)' note D:\Instal\Dev-Cpp\include\c++\3.4.2\bits\ostream.tcc:360 candidates are: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::write(const _CharT*, std::streamsize) [with _CharT = char, _Traits = std::char_traits<char>] A jeśli można zapytać co by tamto rozwiązanie zmieniło (w ogóle co się tam stało) //edit: już rozumiem tą linijkę ale nadal mi nie działa |
|
DejaVu |
» 2009-02-28 18:05:59 Dla linijki, którą napisałem kompilator nie wyrzuca błędów. Sprawdź dokładnie czy masz ją tak samo napisaną (dopisywałem rzutowanie w między czasie, czyli edytowałem posta). |
|
invisiblekid Temat założony przez niniejszego użytkownika |
» 2009-02-28 18:11:47 hehe, no indeed działa. dziwne, że na to nie wpadłem, choć z drugiej strony po moich ostatnich próbach konwertowania integerów na stringi itp. pewnie zwątpiłbym przed zaczęciem próby :P |
|
invisiblekid Temat założony przez niniejszego użytkownika |
» 2009-02-28 18:18:40 Pisząc: "działa!" chyba sie pospieszyłem. Owszem kompiluje sie, ale jak coś zamierzam zrobić to windows wywala bład, ze program przestał działac, czyli inaczej sie zawiesza? Czy to może wynikać z błędów w kodzie, czy z idiotyczności Visty (tfu!)?
|
|
DejaVu |
» 2009-02-28 18:30:48 Przykład zapisu vectora do pliku i odczytu zapisanych danych. #include <iostream> #include <vector> #include <fstream> #include <conio.h> using namespace std;
int main() { vector < int > tab; for( int i = 0; i < 20; i++ ) { tab.push_back( i ); } { fstream plik; plik.open( "bleble.txt", ios::out ); plik.write(( char * ) & tab[ 0 ], tab.size() * sizeof( int ) ); plik.close(); } { fstream plik; plik.open( "bleble.txt", ios::in ); while( !plik.eof() ) { int liczba; plik.read(( char * ) & liczba, sizeof( int ) ); cout << liczba << endl; } plik.close(); } getch(); return 0; }
|
|
invisiblekid Temat założony przez niniejszego użytkownika |
» 2009-02-28 18:35:37 ok, zacytuję cały program. jest on zbliżony do tematu innego wątku- dotyczy szyfrowania :P #include <iostream> #include <cstdlib> #include <ctime> #include <conio.h> #include <fstream> #include <vector>
using namespace std;
int coding( string ciag ); int numberstr( char znak ); vector < int > tab;
int main() { ofstream plik( "wynik.txt" ); if( plik.good() ) { cout << "Wprowadz tresc: " << endl; string dane; getline( cin, dane ); coding( dane ); plik.write(( char * ) & tab[ 0 ], tab.size() * sizeof( int ) ); } else cout << "Dostep do pliku zostal zabroniony" << endl; getch(); return( 0 ); }
int coding( string ciag ) { srand(( unsigned ) time( 0 ) ); int kodon; int dlugosc = 0; while( ciag[ dlugosc ] != 0 ) dlugosc += 1; for( int i = 0; i < dlugosc; i++ ) { char a = ciag[ i ]; kodon =( rand() % 10 ) * 100; kodon += numberstr( a ); tab[ i ] = kodon; } }
int numberstr( char znak ) { int wynik; switch( znak ) { case 'a': break; } return wynik; }
Mam nadzieję że to pomoże w rozwiązaniu problemu :D |
|
« 1 » 2 |