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

Zapis do pliku tablicy (vector'a)

Ostatnio zmodyfikowano 2009-03-01 16:36
Autor Wiadomość
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:
C/C++
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:
C/C++
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
P-4558
DejaVu
» 2009-02-28 17:49:52
C/C++
vector < int > tab;
plik.write(( char * ) & tab[ 0 ], tab.size() * sizeof( int ) );
P-4559
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
P-4560
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).
P-4561
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
P-4562
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!)?

P-4563
DejaVu
» 2009-02-28 18:30:48
Przykład zapisu vectora do pliku i odczytu zapisanych danych.
C/C++
#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 );
    } //for
   
    //zapis
    {
        fstream plik;
        plik.open( "bleble.txt", ios::out );
        plik.write(( char * ) & tab[ 0 ], tab.size() * sizeof( int ) );
        plik.close();
    }
   
    //odczyt
    {
        fstream plik;
        plik.open( "bleble.txt", ios::in );
        while( !plik.eof() )
        {
            int liczba;
            plik.read(( char * ) & liczba, sizeof( int ) );
            cout << liczba << endl;
        } //while
        plik.close();
    }
   
    getch();
    return 0;
}
P-4564
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
C/C++
#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 );
} // main()

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;
    }
} //coding()

int numberstr( char znak )
{
    int wynik;
    switch( znak )
    {
    case 'a':
        // kodowanie... nie pisze jakie bo jest moje i odkrywcze
        // choć może i tak trochę widać z tych rand() :P
        break;
    }
    return wynik;
} //numberstr()
 Mam nadzieję że to pomoże w rozwiązaniu problemu :D
P-4565
« 1 » 2
  Strona 1 z 2 Następna strona