Forum » Programiranje » c++ datoteke
c++ datoteke
hasek ::
rabil bi eno stran kjer so opisani ukazi kako se v c++ dela z datotekami al pa ce kr tu nekdo razlozi
v glavnem rabil bi tako datoteko da imam not shranjenih vec recordov
v knjigi, ki jo imam je opisana samo txt datoteka
v glavnem rabil bi tako datoteko da imam not shranjenih vec recordov
v knjigi, ki jo imam je opisana samo txt datoteka
OwcA ::
Poglej si dokumentacijo std::iostream in njegove potomce (ifstream ...).
Otroška radovednost - gonilo napredka.
nuclear ::
sj ka nimaš tega v helpu.. spomnem se da je turbo C mew vse v help.. pa vse razloženo...
Asus G14 2023 - Ryzen 7940HS - 32GB DDR5 - GeForce RTX 4080 - 990 PRO 4TB
hasek ::
ja kolk vrst datotek pa je v c++
ker jaz sem bil navajen pascala pa so ble tam 3 vrste
tu najdem samo za txt da berem po vrsticah
jaz bi pa mel rad tako da bi lahko v datoteko vpisoval razlicne recorde in jih nato ven bral 1 po enega ne pa da morem it vrstica po vrstici
ker jaz sem bil navajen pascala pa so ble tam 3 vrste
tu najdem samo za txt da berem po vrsticah
jaz bi pa mel rad tako da bi lahko v datoteko vpisoval razlicne recorde in jih nato ven bral 1 po enega ne pa da morem it vrstica po vrstici
OwcA ::
Težko govorimo o različnih vrstah datotek, le o različnih načinih zapisovanja podatkov. Ta sta dva, binarni in ASCII.
Otroška radovednost - gonilo napredka.
jlpktnst ::
s tem da naj bi linux poznal samo binarni način, se motim? (to sem pobral v neki man strani, vendar nisem bil preveč pozoren)
hasek ::
saj to sem jaz mislo ja samo mene zanima kaki so ukazi za delo z datotekami ke rv knjigi jaz nic pametnega ne najdem nse o datotekam je na 2 straneh pa nic ne pise ena stran je predgovora
hasek ::
torej binarni fajli mi omogocajo da lahko zapisujem not po spremenljivkah in ne po vrsticah ane ??
trs ::
@hasek
Ne vem tocno kaj delas, vendar ce pises kaj resnega ... ni prevec pametno zapisat strukturo v file kar tako ...
Ne vem tocno kaj delas, vendar ce pises kaj resnega ... ni prevec pametno zapisat strukturo v file kar tako ...
hasek ::
Napišite program, ki vodi evidenco o N študentih na neki univerzi. Za vsakega študenta so podani naslednji podatki: ime in priimek, številka indeksa, stalno in začasno prebivališče in podatki o opravljenih izpitih. Za vsak izpit so podani naslednji podatki: šifra predmeta, naziv predmeta, profesor, datum opravljanja izpita, ocena pisnega dela, ocena ustnega dela. Program naj za določenega študenta izpiše seznam opravljenih izpitov. Študente naj tudi uredi po abecednem vrstnem redu glede na priimek in ime ali glede na število izpitov, ki jih je študent opravil od določenega datuma naprej.
naloga je tole jaz sem si zamislil tako nardim en struct student
pol pa student [30] nardim array
pol pa ko isce pa to isce in izpisuje pa isce po datoteki direkt to tak dela ker sem nekaj podobnega ze naredo v pascalu lani vendar tukaj ne poznam se tako c++ da bi lahko kr na pamet naredo zato pa sprasujem kak delajo datoteke ne
Ukazi so isti, le način zapisovanja moraš nastaviti.
to mislis tam pri deklaraciji ne binary
naloga je tole jaz sem si zamislil tako nardim en struct student
pol pa student [30] nardim array
pol pa ko isce pa to isce in izpisuje pa isce po datoteki direkt to tak dela ker sem nekaj podobnega ze naredo v pascalu lani vendar tukaj ne poznam se tako c++ da bi lahko kr na pamet naredo zato pa sprasujem kak delajo datoteke ne
Ukazi so isti, le način zapisovanja moraš nastaviti.
to mislis tam pri deklaraciji ne binary
OwcA ::
Precej preprosteje (ali vsaj lepše) je, da is izmisliš preprost format zapisa v tekstovno datoteko in uporabiš kar tega. Morda bi XML ne bil slaba ideja, ali pa uporabiš kar kakšno preprosto "flat file" bazo.
Otroška radovednost - gonilo napredka.
trs ::
@hasek
Te podatke imas lahko vse v ASCII datoteki in si ustrezno napises funkcijo ki ti podatke shrani v datoteko in funkcijo, katera ti nalozi podatke v pomnilnik. Pa tu je se ena stvar ... ne vem, ce bo array[30] dovolj za N studentov ;)
Te podatke imas lahko vse v ASCII datoteki in si ustrezno napises funkcijo ki ti podatke shrani v datoteko in funkcijo, katera ti nalozi podatke v pomnilnik. Pa tu je se ena stvar ... ne vem, ce bo array[30] dovolj za N studentov ;)
hasek ::
to sem samo tak napisal za tu gor
nekaj mi se povej kaj string se deklarira v c++ tak char nekaj[30] al se lahko kako drugace ??
pa potem ko naredim strukturo student
kak naj dam potem to v array
tak ne more bit
int student[30]
kaj naj dam namesto int ?????
nekaj mi se povej kaj string se deklarira v c++ tak char nekaj[30] al se lahko kako drugace ??
pa potem ko naredim strukturo student
kak naj dam potem to v array
tak ne more bit
int student[30]
kaj naj dam namesto int ?????
OwcA ::
Tebi resno niso jasne osnove. Vrni se najprej k tem.
O dobrih knjigah je bilo tu že dosti govora, malo pobrskaj (po(psevdo)išči).
O dobrih knjigah je bilo tu že dosti govora, malo pobrskaj (po(psevdo)išči).
Otroška radovednost - gonilo napredka.
OwcA ::
Rad bi, da so ti jasni podatkovni tipi, zaseganje spomina, delo z datotekami. Osnove skratka.
Ampak, če že hočeš:
Da ne bo pomote, govorimo o ANSI C++ kjer je struct ekvivalenten class, v Cju je nekoliko drugače.
Ampak, če že hočeš:
struct Student; ... Student[30] a;
Da ne bo pomote, govorimo o ANSI C++ kjer je struct ekvivalenten class, v Cju je nekoliko drugače.
Otroška radovednost - gonilo napredka.
Zgodovina sprememb…
- spremenilo: OwcA ()
snow ::
Prvo pejd si kako poglavje o tipih(int char double...) prebrat, potem lahko kakšno o classih in structih... potem pa lahko dejansko začneš to uporabljat. ne pa obratno...
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
hasek ::
kaj pa v txt datoteki se da kaj takega naredit:
1. kaki je ukaz da izvem koliko je vrstic v datoteki
2. ali lahko 2 vrstici med sabo zamenjam ?(kako)
3. kako bi lahko vrini l(ali izbrisal) 1 vrstico med drugi dve brez da bi moral celo datoteko na novo pisat
4. kako izvem na kateri poziciji v tatoteki je trenutno program ?
( datotecni kazalec )
1. kaki je ukaz da izvem koliko je vrstic v datoteki
2. ali lahko 2 vrstici med sabo zamenjam ?(kako)
3. kako bi lahko vrini l(ali izbrisal) 1 vrstico med drugi dve brez da bi moral celo datoteko na novo pisat
4. kako izvem na kateri poziciji v tatoteki je trenutno program ?
( datotecni kazalec )
Vesoljc ::
1) wajl not enod of fajl do:
- getline;
- ++i;
2&3) IIRC, vrivanja, zamenjave in brisanja lahko storiš, če narediš novo datotetko. druga varjanta pa je, da vso vsebino daš v memmory in tam operiraš z njo, brez omejitev. možno da to zna že ifstream... nisem ziher
4) ifstream::tellg, ifstream::seekg
še nekrat:
klik
- getline;
- ++i;
2&3) IIRC, vrivanja, zamenjave in brisanja lahko storiš, če narediš novo datotetko. druga varjanta pa je, da vso vsebino daš v memmory in tam operiraš z njo, brez omejitev. možno da to zna že ifstream... nisem ziher
4) ifstream::tellg, ifstream::seekg
še nekrat:
klik
Abnormal behavior of abnormal brain makes me normal...
hasek ::
rad bi prilepil del moje kode tu gor pa nikakor ne more ker mi skozi javla neko html napako kako naj to odpravim
Person ::
Najbrž ti teh dveh znakov ne pusti napisat: < in >
Poglej source tega html dokumenta...
& pol pa lt; al pa gt;
< >
Poglej source tega html dokumenta...
& pol pa lt; al pa gt;
< >
Let's make something useful!
hasek ::
kaj delam narobe ???
#include iostream.h
#include fstream.h
#include conio.h
#include ctype.h
#include stdlib.h
struct nekaj{
char ime[10];
int datum;
};
nekaj ime;
nekaj x;
main()
{
cout "vpisi ime";
cin ime.ime;
cout "vpisi datum";
cin ime.datum;
fstream mdat ("data.bin", ios::in | ios::out | ios::binary);
mdat.write (ime, sizeof (nekaj));
cout " uspesno zapisano v datoteko";
cout " beri iz datoteke";
getch();
mdat.read (x, sizeof (nekaj));
cout x.ime;
cout x.datum;
}
#include iostream.h
#include fstream.h
#include conio.h
#include ctype.h
#include stdlib.h
struct nekaj{
char ime[10];
int datum;
};
nekaj ime;
nekaj x;
main()
{
cout "vpisi ime";
cin ime.ime;
cout "vpisi datum";
cin ime.datum;
fstream mdat ("data.bin", ios::in | ios::out | ios::binary);
mdat.write (ime, sizeof (nekaj));
cout " uspesno zapisano v datoteko";
cout " beri iz datoteke";
getch();
mdat.read (x, sizeof (nekaj));
cout x.ime;
cout x.datum;
}
Vesoljc ::
kaj ti pa javi?
drugače moraš pa verjetno pred branjem, datoteko vsaj flush-at in vrnit kazalec na začetek le-te.
drugače moraš pa verjetno pred branjem, datoteko vsaj flush-at in vrnit kazalec na začetek le-te.
Abnormal behavior of abnormal brain makes me normal...
hasek ::
ze pri compajlanju mi javi napake
--------------------Configuration: dat2 - Win32 Debug--------------------
Compiling...
dat2.cpp
C:\Program Files\Microsoft Visual Studio\MyProjects\dat2\dat2.cpp(33) : error C2664: 'class ostream &__thiscall ostream::write(const char *,int)' : cannot convert parameter 1 from 'struct nekaj' to 'const char *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
C:\Program Files\Microsoft Visual Studio\MyProjects\dat2\dat2.cpp(46) : error C2664: 'class istream &__thiscall istream::read(char *,int)' : cannot convert parameter 1 from 'struct nekaj' to 'char *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
C:\Program Files\Microsoft Visual Studio\MyProjects\dat2\dat2.cpp(56) : warning C4508: 'main' : function should return a value; 'void' return type assumed
Error executing cl.exe.
dat2.obj - 2 error(s), 1 warning(s)
kaj drugace za vpis pa izpis je tisto prav al kaj ?
--------------------Configuration: dat2 - Win32 Debug--------------------
Compiling...
dat2.cpp
C:\Program Files\Microsoft Visual Studio\MyProjects\dat2\dat2.cpp(33) : error C2664: 'class ostream &__thiscall ostream::write(const char *,int)' : cannot convert parameter 1 from 'struct nekaj' to 'const char *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
C:\Program Files\Microsoft Visual Studio\MyProjects\dat2\dat2.cpp(46) : error C2664: 'class istream &__thiscall istream::read(char *,int)' : cannot convert parameter 1 from 'struct nekaj' to 'char *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
C:\Program Files\Microsoft Visual Studio\MyProjects\dat2\dat2.cpp(56) : warning C4508: 'main' : function should return a value; 'void' return type assumed
Error executing cl.exe.
dat2.obj - 2 error(s), 1 warning(s)
kaj drugace za vpis pa izpis je tisto prav al kaj ?
Vesoljc ::
sej ti pravi kaj je narobe:
cannot convert parameter 1 from 'struct nekaj' to 'const char *'
to ti javi takrat, kadar poskušaš podati funkciji neko spremenljivko, ki pa ni takega tipa kot jo funkcija zahteva.
če pogledaš funkcijo fstream.write zgleda deklaracija takole:
write ( const char* str , streamsize n );
prvi parameter je parameter na polje znakov (char, velikost en byte)
drugi pa je v biti int-eger, ki pove koliko znakov iz polja zapišemo...
karkoli zdaj hočeš zapisat moraš najprej narest pretvorbo v točno tak tip, se pravi polje char-ov, katerega naslov potem podaš funkciji write.
ob takih priložnostih se raje zatečem k fread & fwrite
poskusi ;)
cannot convert parameter 1 from 'struct nekaj' to 'const char *'
to ti javi takrat, kadar poskušaš podati funkciji neko spremenljivko, ki pa ni takega tipa kot jo funkcija zahteva.
če pogledaš funkcijo fstream.write zgleda deklaracija takole:
write ( const char* str , streamsize n );
prvi parameter je parameter na polje znakov (char, velikost en byte)
drugi pa je v biti int-eger, ki pove koliko znakov iz polja zapišemo...
karkoli zdaj hočeš zapisat moraš najprej narest pretvorbo v točno tak tip, se pravi polje char-ov, katerega naslov potem podaš funkciji write.
ob takih priložnostih se raje zatečem k fread & fwrite
poskusi ;)
Abnormal behavior of abnormal brain makes me normal...
hasek ::
ok uspelo mi je datoteko zapisat sicer sem uporabil fprintf
samo sedaj je problem pri izpisu pa javi napako kaj mam narobe ??
#include iostream.h
#include fstream.h
#include conio.h
#includectype.h
#includestdio.h
#includestdlib.h
struct nekaj{
char ime;
char datum;
};
int y=0;
nekaj ime;
nekaj x;
char t;
main()
{
FILE *file1;
cout "vpisi ime";
cin ime.ime;
cout "vpisi datum";
cin ime.datum;
file1=fopen("hasek.jjj","w");
fprintf(file1,"%c,%c", &ime.ime,&ime.datum);
getch();
cout " uspesno zapisano v datoteko";
fclose(file1);
cout " beri iz datoteke";
getch();
file1=fopen("hasek.jjj","r");
while(file1 =! NULL )
{
fscanf(file1,"%c,%c", ime.ime,ime.datum);
ime.ime=t;
cout endl;
cout ime.ime;
cout ime.datum;
}
fclose(file1);
return 0;
}
samo sedaj je problem pri izpisu pa javi napako kaj mam narobe ??
#include iostream.h
#include fstream.h
#include conio.h
#includectype.h
#includestdio.h
#includestdlib.h
struct nekaj{
char ime;
char datum;
};
int y=0;
nekaj ime;
nekaj x;
char t;
main()
{
FILE *file1;
cout "vpisi ime";
cin ime.ime;
cout "vpisi datum";
cin ime.datum;
file1=fopen("hasek.jjj","w");
fprintf(file1,"%c,%c", &ime.ime,&ime.datum);
getch();
cout " uspesno zapisano v datoteko";
fclose(file1);
cout " beri iz datoteke";
getch();
file1=fopen("hasek.jjj","r");
while(file1 =! NULL )
{
fscanf(file1,"%c,%c", ime.ime,ime.datum);
ime.ime=t;
cout endl;
cout ime.ime;
cout ime.datum;
}
fclose(file1);
return 0;
}
Zgodovina sprememb…
- spremenil: hasek ()
Vesoljc ::
glej, meni se zdi da si ti en velik razvajenc...
pa narobe zapiuješ v datoteko...
%c pomeni single character
uporabi %s za tekst in %d za decimalna števila (int in ostalo)
piše vse, ampak če bi kaj prebral, bi to že vedel...
pa narobe zapiuješ v datoteko...
%c pomeni single character
uporabi %s za tekst in %d za decimalna števila (int in ostalo)
piše vse, ampak če bi kaj prebral, bi to že vedel...
Abnormal behavior of abnormal brain makes me normal...
hasek ::
ok ne vprasaj kako vendar ko sem visual studio na novo zagnal je pa zacelo vredi delat :)))))))
naslednji problem ki ga imam kako sedaj vpisati ce imam strukturo v strukturi osnovna struktura se lepo vpise ko pa hocem dati x.e.k pa se ne vpise in javi napako
#include stdio.h
#include iostream.h
#include stdlib.h
#include conio.h
#include ctype.h
#include string.h
int main ()
{
struct o {
char k[10];
};
struct j
{
char str [80];
float f;
struct o e;
};
j x,u;
FILE * pFile;
cout "vpisi f";
cin x.f;
cout "vpisi str";
cin x.str;
cout "vpisi e";
cin x.e.k;
pFile = fopen ("myfile.txt","w+");
fprintf (pFile, "%f %s %s", x.f, x.str);
fprintf(pFile,"%s", x.e.k);
rewind (pFile);
fscanf (pFile, "%f", &x.f);
fscanf (pFile, "%s", x.str);
fscanf (pFile, "%s", x.e.k);
fclose (pFile);
printf ("e read: %f andI hav %s\n",x.f,x.str);
return 0;
}
naslednji problem ki ga imam kako sedaj vpisati ce imam strukturo v strukturi osnovna struktura se lepo vpise ko pa hocem dati x.e.k pa se ne vpise in javi napako
#include stdio.h
#include iostream.h
#include stdlib.h
#include conio.h
#include ctype.h
#include string.h
int main ()
{
struct o {
char k[10];
};
struct j
{
char str [80];
float f;
struct o e;
};
j x,u;
FILE * pFile;
cout "vpisi f";
cin x.f;
cout "vpisi str";
cin x.str;
cout "vpisi e";
cin x.e.k;
pFile = fopen ("myfile.txt","w+");
fprintf (pFile, "%f %s %s", x.f, x.str);
fprintf(pFile,"%s", x.e.k);
rewind (pFile);
fscanf (pFile, "%f", &x.f);
fscanf (pFile, "%s", x.str);
fscanf (pFile, "%s", x.e.k);
fclose (pFile);
printf ("e read: %f andI hav %s\n",x.f,x.str);
return 0;
}
BigWhale ::
x.e.k?
Se ti ne zdi, da si rahlo zakompliciral zadeve? ;>
Pa tudi malo cudna imena spremenljivk imas. Kako se sploh znajdes iz te kode? :P
Se ti ne zdi, da si rahlo zakompliciral zadeve? ;>
Pa tudi malo cudna imena spremenljivk imas. Kako se sploh znajdes iz te kode? :P
hasek ::
tole kodo ko sem dal gor je tak samo za test da vidim ce bo slo tak no pravis da sem zakompliciral vendar tak more bit ker imam tudi v onem programu ki ga morem napisat vgnezdeno strukturo
Vesoljc ::
zakwa že takoj ne pokažeš tudi error-ja ???
Abnormal behavior of abnormal brain makes me normal...
Vesoljc ::
skrajn cajt je da se naučiš debuggat...
od začetne vrstice do končne prtiski F9 (rdeča pika, break point)
nato zaženeš F5 (debug mode), nato po korakih prtiskaš F5.
spodaj desno imaš okence Watch al neki tacga... tja not vpišeš ime spremenljivke ki jo želiš spremljat, ko se spremeni postane rdeča.
in tudi ko pride do napake, boš točno videl KJE je napaka...
nato vprašaj...
od začetne vrstice do končne prtiski F9 (rdeča pika, break point)
nato zaženeš F5 (debug mode), nato po korakih prtiskaš F5.
spodaj desno imaš okence Watch al neki tacga... tja not vpišeš ime spremenljivke ki jo želiš spremljat, ko se spremeni postane rdeča.
in tudi ko pride do napake, boš točno videl KJE je napaka...
nato vprašaj...
Abnormal behavior of abnormal brain makes me normal...
hasek ::
ne bos verjel uspelo mi je vpisati v datoteko in iz nje brati kodo mam takole
#include iostream.h
#include ctype.h
#include conio.h
#include stdlib.h
#include string.h
#include fstream.h
#include stdio.h
struct oj
{
char a[10];
};
struct nekaj{
char ime[10];
char priimek[10];
int datum;
oj e;
};
nekaj x;
nekaj student;
char vrstica[500];
int menu=0;
main()
{
while (menu < 5){
cout endl "vpisi 1 za vpis";
cout endl "vpisi 2 za izpis";
cout endl "pritisni 4 za izbris datoteke";
cout endl "vpisi 5 za izhod";
cin menu;
if (menu == 1 ){
cout "vpisi ime studenta";
cin student.ime;
cout endl "vpisi priimek studenta";
cin student.priimek;
cout endl "vpisi datum";
cin student.datum;
cout "vpisi e";
cin student.e.a;
fstream f("racuni.dat", ios::app);
f.write((char *)&student, sizeof(nekaj));
f.close();
}
if (menu == 2 ){
ifstream f("racuni.dat", ios::in);
system("cls");
while(!f.eof()){
f.read((char *)&x, sizeof(nekaj));
cout x.ime x.priimek x.datum x.e.a endl;
}
f.close();
}
}
if (menu ==4){
}
moj edini problem je se kako bi v programu izbrisal vsebino datoteke
ter kako bi dobil dolzino datoteke kot je v pascalu x= length(hasek.dat)
#include iostream.h
#include ctype.h
#include conio.h
#include stdlib.h
#include string.h
#include fstream.h
#include stdio.h
struct oj
{
char a[10];
};
struct nekaj{
char ime[10];
char priimek[10];
int datum;
oj e;
};
nekaj x;
nekaj student;
char vrstica[500];
int menu=0;
main()
{
while (menu < 5){
cout endl "vpisi 1 za vpis";
cout endl "vpisi 2 za izpis";
cout endl "pritisni 4 za izbris datoteke";
cout endl "vpisi 5 za izhod";
cin menu;
if (menu == 1 ){
cout "vpisi ime studenta";
cin student.ime;
cout endl "vpisi priimek studenta";
cin student.priimek;
cout endl "vpisi datum";
cin student.datum;
cout "vpisi e";
cin student.e.a;
fstream f("racuni.dat", ios::app);
f.write((char *)&student, sizeof(nekaj));
f.close();
}
if (menu == 2 ){
ifstream f("racuni.dat", ios::in);
system("cls");
while(!f.eof()){
f.read((char *)&x, sizeof(nekaj));
cout x.ime x.priimek x.datum x.e.a endl;
}
f.close();
}
}
if (menu ==4){
}
moj edini problem je se kako bi v programu izbrisal vsebino datoteke
ter kako bi dobil dolzino datoteke kot je v pascalu x= length(hasek.dat)
Vesoljc ::
i said it before, i'll say it again: razvajenc!
1
zakaj pa rabiš dolžino datoteke? sej maš eof...
drgač pa 2 pa poglej predzadnji primer...
če pa uporabljaš cstdio.h (fopen, itd...) 3
a je res tolk težko napisat v yahoo-ja "text file size in c++" ???
dej se mejčken znajdi no...
1
zakaj pa rabiš dolžino datoteke? sej maš eof...
drgač pa 2 pa poglej predzadnji primer...
če pa uporabljaš cstdio.h (fopen, itd...) 3
a je res tolk težko napisat v yahoo-ja "text file size in c++" ???
dej se mejčken znajdi no...
Abnormal behavior of abnormal brain makes me normal...
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | kje zaceti z c++ ?Oddelek: Programiranje | 3869 (2177) | Monster |
» | velike male besede c++Oddelek: Programiranje | 2584 (2200) | PoPon2 |
» | [C++]Brisanje struktureOddelek: Programiranje | 1428 (1359) | jernejf |
» | [C++]StruktureOddelek: Programiranje | 4045 (3974) | jernejf |
» | Pac sm butl !!!!!Oddelek: Programiranje | 1387 (1029) | Phil |