mar_cin! Opublikowano 16 Grudnia 2004 Zgłoś Opublikowano 16 Grudnia 2004 Jak odczytać losową strukturę z pliku? tzn. mam zadeklarowaną strukture struct nazwa{ int liczba; // numer struktury char znak; char tablica[20] ; } struct nazwa baza[50]; i chce odczytać jedną taką strukturę z pliku tekstowego Jeśli odczytuje wszystkie struktury naraz jest ok, ale ja chce odczytać tylko jedną taką i to w dodatku losową, np. strukturę o numerze liczba (int z tego pliku) Czy możecie podać mi taki fragment kodu? Bardzo prosze! Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
pociag Opublikowano 16 Grudnia 2004 Zgłoś Opublikowano 16 Grudnia 2004 taki programik napisalem kiedys na laborke z informy, funkcja odczyt robi chyba to o co pytasz. Dostosuj to sobie do swoich potrzeb. W tym programie jest juz zdefinowana baza zeby mozna bylo zobaczyc efekty dzialania. Jesli chcesz sprawdzic jak dziala to skompiluj, odpal zapisz baze do pliki a potem sobie wczytaj. (jakbys potrzenowal to mam to samo jeszce zrobione na operatorach pobrania ">>" ) #include <stdio.h>#include <math.h>#include <stdlib.h>#include <string.h>#include <iostream.h>#include<fstream.h>#include <conio.h>const int n=20;struct salon { char marka[20]; int rok; long cena; long pojemnosc; };salon tab[]= { {"Fiat",2000,21000,2000}, { "WV",1999,24100,3200}, { "Opel",1994,12000,1400}, { "Fiat",1989,900,600}, { "Toyota",2000,98300,95600}, { "Opel",2003,45000,1600}, { "WV",1990,13400,1200}, { "Ford",1996,32900,2200}, { "VV",2001,67700,2000}, { "Ford",2003,67000,2000}, {"Fiat",2001,23000,1100}, { "WV",1995,21100,1200}, { "Opel",1998,18000,1300}, { "Fiat",1985,300,1500}, { "Toyota",1990,7300,4000}, { "Opel",2001,30000,1400}, { "WV",1999,19400,1500}, { "Ford",1993,12900,3000}, { "VV",1981,1700,1500}, { "Ford",1997,27000,4000} };void wczytaj(salon t[], int N){ for (int i=0; i<N; i++) {printf("npodaj marke :");gets(t[i].marka); printf("podaj rok :");cin>>t[i].rok; printf("podaj cene :");cin>>t[i].cena; printf("podaj pojemnosc :");cin>>t[i].pojemnosc; printf("n"); }}void pisz(salon t[], int N){ printf("n%20s","marka"); printf("%7s", "rok"); printf("%8s","cena");printf("%10s"," pojemnoscn"); printf(" --------------------------------n"); for (int i=0; i<N; i++) {printf("%20s",t[i].marka); printf("%8i", t[i].rok); printf("%8ld", t[i].cena); printf("%8ld", t[i].pojemnosc); printf("n"); }}void zapis(salon t[],int n){ char *nz; printf("nPodaj nazwe pliku :");gets(nz); fstream s; s.open(nz,ios::out | ios::binary); for(int i=0;i<n;i++) { s.write((char*)(t+i),sizeof(salon));} s.close();}int odczyt(salon t[],int n){ fstream k; char *nw; printf("nPodaj nazwe pliku :");gets(nw); int z=0; k.open(nw,ios::in); for(int i=0;i<n;i++){ k.seekp(sizeof(salon)*i,ios::beg); k.read((char*)(t+i), sizeof(salon)); } if (k.good()) z=1; k.close(); return z;}void zapistxt(salon t[],int n ){ fstream b; char *nz; printf("nPodaj nazwe pliku :");gets(nz); b.open(nz,ios::app); for(int i=0;i<n;i++) { b<<t[i].marka<<"t"<<t[i].rok<<"t"<<t[i].cena<<"t"<<t[i].pojemnosc<<"n";} b.close();}void main(void){clrscr();char menu;char but;printf("n1 - zapis do pliku:");printf("n2 - odczyt z pliku:");menu=getch();switch(menu){case '1':{ printf("nChcesz zapisac tablice tekstowo(t/n):"); but=getch(); switch(but) {case 't':zapistxt(tab,n);break; case 'n':break; } printf("nChcesz zapisac tablice binarnie(t/n):"); but=getch(); switch(but) {case 't':zapis(tab,n);break; case 'n':break; }break;}case '2': { odczyt(tab,n); printf("Chcesz zobaczyc tablice (t/n):"); menu=getch(); switch(menu) {case 't':pisz(tab,n);break; case 'n':break; } }break;}getche();} Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
piotrek_zet Opublikowano 17 Grudnia 2004 Zgłoś Opublikowano 17 Grudnia 2004 musisz sprawdzic sizeof tejs struORT: ORT: ORT: ktury, i pozniej uzyc funkcji FILESEEK do przesuniecia odczytu o odpowiednia ilosc byte`ow - sizeof * il_struktur Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...