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

Zapis struktur danych do pliku

Ostatnio zmodyfikowano 2011-08-22 10:53
Autor Wiadomość
mykosik
Temat założony przez niniejszego użytkownika
Zapis struktur danych do pliku
» 2011-08-13 10:09:11
Witam
1.Czy dane różnego typu ze struktury mają być zapisane w osobnych plikach?Czy tez można różne typy danych ze struktury zapisać do tego samego pliku?Jeżeli tak to jak je później odzyskać aby to były dane okreslone przez strukturę
2.Czy mogę używać znaku specjalnego \n aby tworzyc nowy wiersz podczas zapisywania danych do pliku?
Zrobiłem coś  takiego i to działa ale nie wiem czy tak to sie powinno prawidłowo robić?
C/C++
#include <iostream>
#include <fstream>

using namespace std;

struct dane
{
    string imie;
    int liczba;
   
};
int main()
{
   
    dane osobowe[ 5 ];
    string spac = "\n";
   
    ofstream Imie( "imie.txt", ios::app );
   
    for( int i = 0; i < 5; i++ )
   
    {
        cout << "podaj imie" << endl;
        cin.sync();
        cin >> osobowe[ i ].imie;
        Imie << osobowe[ i ].imie;
        Imie << spac;
    }
    Imie.close();
   
    ofstream licz( "liczba.txt", ios::app );
   
    for( int i = 0; i < 5; i++ )
    {
        cout << "podaj liczbe" << endl;
        cin.sync();
        cin >> osobowe[ i ].liczba;
        licz << osobowe[ i ].liczba;
        licz << spac;
    }
    licz.close();
   
   
   
   
   
    return 0;
}
P-39034
m4tx
» 2011-08-13 10:21:45
P-39036
mykosik
Temat założony przez niniejszego użytkownika
» 2011-08-13 10:27:16
Dzieki, Bracie tego szukałem!
P-39037
mykosik
Temat założony przez niniejszego użytkownika
» 2011-08-14 15:32:42
Wszystko fajnie ale jest tu błąd
DLACZEGO?
C/C++
#include <string>
#include <fstream>

struct s
{
    int a;
    float b;
};

void write( const std::string & file_name, s & data )
{
    std::ofstream out( file_name.c_str() );
    out.write( reinterpret_cast < char *>( & s ), sizeof( s ) );
}

void read( const std::string & file_name, s & data )
{
    std::ifstream in( file_name.c_str() );
    in.read( reinterpret_cast < char *>( & s ), sizeof( s ) );
}

int main()
{
    s myStruct;
    read( "test.dat", myStruct );
    write( "test.dat", myStruct );
}
P-39143
m4tx
» 2011-08-14 15:39:07
C/C++
void write( const std::string & file_name, s & data )
{
    std::ofstream out( file_name.c_str() );
    out.write( reinterpret_cast < char *>( & s ), sizeof( s ) );
}

void read( const std::string & file_name, s & data )
{
    std::ifstream in( file_name.c_str() );
    in.read( reinterpret_cast < char *>( & s ), sizeof( s ) );
}

Zamień to na:

C/C++
void write( const std::string & file_name, s & data )
{
    std::ofstream out( file_name.c_str() );
    out.write( reinterpret_cast < char *>( & data ), sizeof( s ) );
}

void read( const std::string & file_name, s & data )
{
    std::ifstream in( file_name.c_str() );
    in.read( reinterpret_cast < char *>( & data ), sizeof( s ) );
}

Autorowi tematu, do którego dałem Ci link chyba coś się pomyliło ;)
P-39144
mykosik
Temat założony przez niniejszego użytkownika
» 2011-08-14 17:32:15
Dziekuję bardzo za odpowiedż
Nie przerabiałem jeszcze rzutowania
co to oznacza
reinterpret_cast < char *>( & data )
Czu chodzi o to że dane zawarte  strukturze są zamieniane  na znaki?
  
P-39148
pekfos
» 2011-08-14 18:21:28
Nie są przerabiane lecz są traktowane jak znaki. otwieraj plik binarnie by nie tracić danych(a raczej ich nie zyskiwać :P)
Wtedy przejście do nowej linii to nie
"\n"
 tylko
"\r\n"
.
P-39150
mykosik
Temat założony przez niniejszego użytkownika
» 2011-08-22 10:02:40
Niestety nie kapuję , jak te dane zapisać i odczytać ?Czy ktoś może to jasno wytłumaczyć?

C/C++
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

struct s
{
    int a;
    float b;
};

void write( const std::string & file_name, s & data )
{
    std::ofstream out( file_name.c_str() );
    out.write( reinterpret_cast < char *>( & data ), sizeof( s ) );
}

void read( const std::string & file_name, s & data )
{
    std::ifstream in( file_name.c_str() );
    in.read( reinterpret_cast < char *>( & data ), sizeof( s ) );
   
}

int main()
{
    s myStruct;
    myStruct.a = 5;
    myStruct.b = 34;
   
    read( "test.dat", myStruct );
    write( "test.dat", myStruct );
}
P-39668
« 1 » 2
  Strona 1 z 2 Następna strona