Zapis do pliku

0

Jak w C++ Builderze zapisać do pliku dane po naciśnięciu buttona, np z edit albo jakiesc zmiennej string?

0

Na formie umieszczasz komponenty:
TButton, TRichEdit, TSaveDialog

void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(SaveDialog1->Execute()){
RichEdit1->Lines->SaveToFile(SaveDialog1->FileName);
}
}
[email protected]

0

No coż może to nie jest idealna metoda ale wydaje mi się że jest dość prosta i skuteczna:


#include <fstream.h>

char *dane;
dane =new char[Edit1->Text.Length()+1];
sprintf(dane, "%s", Edit1->Text.c_str());
Edit1->Text = dane; // - to pokarze Ci co zostanie zapisane do pliku - niejest konieczne ale dobre na sprawdzenie czy wszystko poszlo OK, w efekcie pole Edit1 nie powinno się zmienić

ofstream outfile;
outfile.open("data/test.mck", ios::out|ios::app); // tak zrób jeśli chcesz dopisywać do pliku
outfile.open("data/test.mck");  // tak  zrób jeśli pilik ma być tworzony zawsze od nowa
outfile << dane << endl;
outfile.close();
0

Jak juz modzicie ze strumieniami to polecam takze fopen, fclose i fwrite :P

0

Odświeżę watek aby nowego tematu nie zakładać. Mam taki kod:

 void dopisz()
{
     ofstream plik;
     plik.open("dane.txt",ios::out|ios::app );
     cout << "Podaj imie:     ";
     cin >> ps->imie;
     cout << "Podaj nazwisko: ";
     cin >> ps->nazwisko;
     cout << "Podaj wiek:     ";
     cin >> ps->wiek;
     cout << endl;
     plik.close();
}

Jest to funkcja która dopisuje do pliku następne dane osobowe pracownika, przed użyciem tej funkcji mam funkcję która dodaje już np 3 osoby, i nie wiem jak dopisać następna osobę do pliku, zawsze mi nadpisze a nie dopisze ten mój kod. Proszę o pomoc.

0

Ten kod nic nie zapisuje do pliku, więc nie może ci go nadpisać.

0

No to jak mam dopisać do pliku kolejne dane pracownika ?

0

To zależy w jakim formacie zapisujesz ten plik.

0

W formacie txt

0

Musisz pokazać inną funkcje zapisującą lub jakaś odczytująca.
Chodzi o to że jeżeli w pliku najpierw zapisano nazwisko a później imię a odczytujesz w innej kolejności to będą problemy.
Pod formatem pliku ma się na myśli kolejność zapisywanych w nim danych separatory tych danych oraz separatory rekordów.
Txt to tylko rozszerzenie - często nie świadczy o formacie pliku (przynajmniej takie rozszerzenia jak txt lub dat).

0
 #include<iostream>
#include<string>
#include<fstream>
#include<algorithm>
using namespace std;

struct dane
{
       string imie,nazwisko;
       int wiek;
} *ps;

void dodaj_pracownika(int n)
{
     ps=new dane[n];
     for(int i=0;i<n;i++)
     {
             cout << "PRACOWNIK NR " << i+1 << endl;
             cout << "Podaj imie:     ";
             cin >> ps[i].imie;
             cout << "Podaj nazwisko: ";
             cin >> ps[i].nazwisko;
             cout << "Podaj wiek:     ";
             cin >> ps[i].wiek;
             cout << endl;
     }
}


void wyswietl(int n)
{
     system("cls");
     if(ps==0)
     {
              cout << "BRAK PRACOWNIKOW " << endl;
              cout << "\n\n\n " << endl;
     }
     else
     {
         
         for(int i=0;i<n;i++)
         {
                  cout << "PRACOWNIK NR " << i+1 << ": " << endl;
                  cout << "IMIE:        " << ps[i].imie << endl;
                  cout << "NAZWISKO:    " << ps[i].nazwisko << endl;
                  cout << "WIEK:        " << ps[i].wiek << endl;
                  cout << endl;
         }
         cout << "\n\n";
     }
}

void zapis_do_pliku(int n)
{
     system("cls");
     bool good();
     ofstream plik;
     plik.open("dane.txt");
     cout << "ZAPIS DO PLIKU" << endl;
     if( plik.good() )
     {
             
             for(int i=0;i<n;i++)
             {
                     plik << "PRACOWNIK NR " << i+1 << endl;
                     plik << "IMIE:        " << ps[i].imie << endl;
                     plik << "NAZWISKO:    " << ps[i].nazwisko << endl;
                     plik << "WIEK:        " << ps[i].wiek << endl;
                     plik << " \n ";
             }
             plik.close();
     }
     else
             cout << "Nie udana proba otwarcia pliku do zapisu danych " << endl;
}

void odczyt_danych(int n)
{
     system("cls");
     string x;
     ifstream plik("dane.txt");
     if( plik.good() == true)
     {
                    while(plik)
                    {
                                      getline(plik, x);
                                      cout << x << endl;
                    }
                    plik.close();
     }
     else
     {
         cout << "Plik nie może zostać otworzony";
     } 
     cout << "\n\n\n\n" << endl;
}

void pokaz_pracownika(int n)
{
    
     int i=0;
     string _imie;
     cout << "Podaj imie: ";
     cin >> _imie;
     while(i<n)
     {
            if(ps[i].imie == _imie)
            {
                cout << "PRACOWNIK NR " << i+1 << ": " << endl;
                cout << "IMIE:        " << ps[i].imie << endl;
                cout << "NAZWISKO:    " << ps[i].nazwisko << endl;
                cout << "WIEK:        " << ps[i].wiek << endl;
                cout << endl;
                i++;
            }
            else
                i++;
            
                
     }
}

void sortowanie(int n)
{
    system("cls");
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n-1;j++)
        {
            if(ps[j].wiek>ps[j+1].wiek)
            swap( ps[j], ps[j+1] );
        }
    }
    for(int i=0;i<n;i++)
         {
                  cout << "PRACOWNIK NR " << i+1 << ": " << endl;
                  cout << "IMIE:        " << ps[i].imie << endl;
                  cout << "NAZWISKO:    " << ps[i].nazwisko << endl;
                  cout << "WIEK:        " << ps[i].wiek << endl;
                  cout << endl;
         }
}

void edycja(int n)
{
    system("cls");
    int i=0,x, _wiek;
    string _imie, _nazwisko;
    cout << "Podaj osobe do zmiany danych (imie) : ";
    cin >> _imie;
    while(i<n)
    {
        if(ps[i].imie == _imie)
        {
                  cout << "PRACOWNIK DO ZMIANY DANYCH OSOBOWYCH " << endl;
                  cout << "IMIE:        " << ps[i].imie << endl;
                  cout << "NAZWISKO:    " << ps[i].nazwisko << endl;
                  cout << "WIEK:        " << ps[i].wiek << endl;
                  cout << endl;
                  break;
                  
        }
    }
    cout << "Co chcesz zmienic: " << endl;
    cout << "1 - Imie " << endl;
    cout << "2 - Nazwisko " << endl;
    cout << "3 - Wiek " << endl;
    cin >> x;
    switch(x)
    {
        case 1:
            {
                cout << "Podaj imie: ";
                cin >> _imie;
                ps[i].imie=_imie;
                break;
            }
        case 2:
            {
                cout << "Podaj nazwisko: ";
                cin >> _nazwisko;
                ps[i].nazwisko=_nazwisko;
                break;
            }
        case 3:
            {
                cout << "Podaj wiek: ";
                cin >> _wiek;
                ps[i].wiek=_wiek;
            }
    }
    system("cls");
}


void dopisz(int n)
{
     
}
void koniec()
{
     system("EXIT");
}

int main()
{
    cozrobic:
        
    cout << "..::BAZA DANYCH PRACOWNIKOW::.. " << endl;
    cout << "1 - DODAJ PRACOWNIKOW " << endl;
    cout << "2 - WYSWIETL PRACOWNIKOW" << endl;
    cout << "3 - WYSZUKIWANIE PRACOWNIKOW " << endl;
    cout << "4 - ZAPIS DO PLIKU " << endl;
    cout << "5 - ODCZYT Z PLIKU " << endl;
    cout << "6 - SORTOWANIE POD WZGLEDEM WIEKU " << endl;
    cout << "7 - EDYCJA PLIKU Z DANYMI " << endl;
    cout << "8 - DOPISZ DO PLIKU " << endl;
    cout << "9 - KONIEC PROGRAMU " << endl;
    int x,n;
    cin >> x;
    
    system("cls");
    
    switch(x)
    {
        case 1:
            {
                cout << "Podaj ilosc pracownikow: ";
                cin >> n;
                dodaj_pracownika(n);
                goto cozrobic;
            }
        case 2:
            {
                wyswietl(n);
                goto cozrobic;
            }
        case 3:
            {
                pokaz_pracownika(n);
                goto cozrobic;
            }
        case 4:
            {
                zapis_do_pliku(n);
                goto cozrobic;
            }
        case 5:
            {
                odczyt_danych(n);
                goto cozrobic;
            }
        case 6:
            {
                sortowanie(n);
                goto cozrobic;
            }
        case 7:
            {
                edycja(n);
                goto cozrobic;
            }     
        case 8:
             {
                  dopisz(n);
                  goto cozrobic;
             }
        case 9:
             {
                  koniec();
                  break;
             }
    }
    
    
    system("pause");
    return 0;
}

Oto cała moja baza danych oprócz dopisywania pracownika

0

Odczyt też ci nie działa.
Przy tak zapisanych do pliku danych, kod wczytujący ten plik zajmie będzie miał rozmiar co najmniej połowę obecnego.
Rozważ inny wariant zapisywania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1