Jak w C++ Builderze zapisać do pliku dane po naciśnięciu buttona, np z edit albo jakiesc zmiennej string?
- Rejestracja:prawie 21 lat
- Ostatnio:prawie 21 lat
- Postów:6
Na formie umieszczasz komponenty:
TButton, TRichEdit, TSaveDialog
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(SaveDialog1->Execute()){
RichEdit1->Lines->SaveToFile(SaveDialog1->FileName);
}
}
leszekthebest@o2.pl

- Rejestracja:ponad 21 lat
- Ostatnio:ponad 13 lat
- Postów:11
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();
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.


- Rejestracja:ponad 19 lat
- Ostatnio:3 miesiące
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).
#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